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

しかし、最初の文字がどこのフィールドを取得するのですか?[a-z]?例えばphp mysqlクエリの最初の文字!= [a-z]

\"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. 

は、どのようにあなたが最初の文字!=[a-z]結果のすべてのこれらの種類を取得するためにPHPのMySQLのクエリを使用できますか?

答えて

8

これを試してください:あなたは、それは大文字小文字を区別しない(大文字または小文字)にしたい場合です

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

。あなたは大文字-Zできるようにしたい場合は、単に使用します。

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

を基本的に正規表現は、文字列の先頭に文字-Zを持っていない任意の文字列に一致すると言います。

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

非REGEXPソリューションはBETWEENを使用することです:

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

MySQLがクエリBETWEENのインデックスを使用することができますので、これは、REGEXPを使用するよりも高速でなければなりませんREGEXPクエリでは実行できません。

しかし、ベンチマークはありません。テストするのは難しくありません。

+0

MySQLは、関数内で文字列をラップしたので、そのインデックスを使用しません。 mysqlがインデックスを使用するためにはwhereステートメント内の比較でインデックスフィールドを分離する必要があります。 – Riedsio

+0

@Riedsioどういう意味ですか? LEFTは指標を利用することができる。 – alexn

関連する問題