2011-08-27 20 views
6
SELECT * FROM dbname WHERE text = 'a%' 
(this can get all the `text` fields which begin with the letter "a".) 

Ma come ottenere i campi in cui la prima lettera! = [A-z]?php mysql query prima lettera! = [A-z]

ad esempio:

\"hello\" // this first letter begin as \ not range in a-z 
いけ // also first letter not begin range in a-z 
... 
may also have a white space as the first character. 

Così come si può usare php mysql query per ottenere tutti questi tipi di risultati in cui la prima lettera !=[a-z]?

risposta

8

Prova questo:

SELECT * FROM dbname WHERE text REGEXP '^[^a-zA-Z]'; 

è che se si vuole che sia case insensitive (maiuscole o minuscole). Se si desidera consentire le lettere maiuscole A-Z poi basta usare:

SELECT * FROM dbname WHERE text REGEXP '^[^a-z]'; 

In sostanza l'espressione regolare dice corrisponde a qualsiasi stringa che non dispone di lettere a-z, all'inizio della stringa.

1
SELECT * FROM dbname WHERE text NOT REGEXP '^[a-z]'; 
1

Un non-REGEXP soluzione è usare BETWEEN:

SELECT * FROM dbname WHERE LEFT(text, 1) NOT BETWEEN 'a' AND 'Z'; 

Questo dovrebbe essere più veloce rispetto all'utilizzo di REGEXP, dal momento che MySQL può utilizzare gli indici su tra le query , mentre non può su query REGEXP.

Tuttavia, non ho parametri di riferimento disponibili, non dovrebbe essere difficile da testare però.

+0

MySQL non utilizzerà l'indice sul testo come lo ha avvolto in una funzione. Devi isolare il campo indicizzato nel confronto nella dichiarazione where per mysql per usare un indice su di esso. – Riedsio

+0

@Riedsio cosa intendi? 'SINISTRA 'può utilizzare indici. – alexn