2011-08-27 58 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. 

所以你怎么可以使用PHP MySQL查询来获取所有这些不同的结果。其中,第一个字母!=[a-z]

回答

8

试试这个:

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

,如果你希望它是不区分大小写(大写或小写)即到。如果你想允许大写字母A-Z就用:

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

本质上的正则表达式匹配说在没有字母的字符串的开头A-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'; 

这应该是比使用REGEXP更快,因为MySQL能在查询之间使用索引,但它不能在REGEXP查询上。

但是,我没有可用的基准测试,不应该难以测试。

+0

MySQL将不会在文本中使用索引,因为您已将它包装在函数中。你必须在where语句中的比较中隔离mysql的索引字段,以便在其上使用索引。 – Riedsio

+0

@Riedsio你是什么意思? 'LEFT'可以利用指数。 – alexn

相关问题