2014-10-09 13 views
5

C'è la tabella denominata Students. Voglio estrarre i nomi degli studenti il ​​cui nome inizia con "n" o "p" o "y". So che in TSQL (server MS SQL) posso scrivere la query come segue e funziona:LIKE 'Sintassi' [charlist]% 'non funziona in MySQL (phpMyAdmin)

SELECT * FROM Students WHERE StudentName LIKE '[npy]%' 

Ma quando eseguo la stessa query in MySQL (phpMyAdmin) non sono riuscito a recuperare il corretto set di risultati. Ho provato a convertire le lettere del nome dello studente nello stesso caso menzionato nella charlist. Ho fatto un po 'di ricerca su google e ho scoperto che in MySQL abbiamo bisogno di specificarlo come espressione regolare. Ho eseguito la query sottostante e ho ottenuto il risultato previsto.

SELECT * FROM Students WHERE StudentName REGEXP '[[:<:]]n | [[:<:]]p | [[:<:]]y' 

voglio sapere il motivo per cui LIKE '[charlist]%' sintassi non funziona con MySQL. È dovuto all'implementazione in MySQL (MySQL non supporta la sintassi) o qualcosa di sbagliato nella versione phpmyadmin che sto usando?

Qualsiasi aiuto in merito è molto apprezzato. Grazie :)

+3

'LIKE '[charlist]%'' è come cercare una stringa che inizia con '[charlist]'. Per la tua domanda, devi ripetere l'istruzione 'LIKE' per ogni carattere. –

+4

'LIKE' (in MySQL) non usa espressioni regolari. Ha caratteri jolly. "%" significa "0 o più caratteri" e "_" significa "un carattere." Se vuoi usare un'espressione regolare, devi usare "REGEXP" (o "RLIKE"). Prova "StudentName REGEXP"^[npy ]. * ''. –

+0

MySQL non ha la sintassi dei jolly in LIKE, per quanto ne so solo SQL Server e Sybase/SQL Anywhere. –

risposta

3

C'è un ancora più breve di scrivere la vostra richiesta:

SELECT * FROM Students WHERE StudentName REGEXP '^[npy]' 

E se siete preoccupati per essere case sensitive:

SELECT * FROM Students WHERE StudentName REGEXP BINARY '^[npy]' 

In MySQL, un pattern match REGEXP riesce in qualsiasi punto del valore, che differisce da LIKE in cui il modello deve corrispondere all'intero valore.

Penso seguente link vi darà una risposta più completa:

MySQL Pattern Matching

0

MySQL: caso insensitive: SELECT * FROM Students WHERE StudentName RLIKE '^[npy]' ; Case sensitive: SELECT * FROM Students WHERE StudentName CAST(RLIKE as BINARY) '^[npy]' ;