0

我想编写一个查询,其名称的第一个字符具有aorbcor c-g。我有按字母顺序排列的姓名列表A-Z。我想按字母顺序过滤 3 个步骤 A-G, G-M, N-Z.

通过单击A-G记录显示第一个字符开始的名称A-G

mysql_query("select * from users where name like "A%" or name like "B%" or name like "C%" or name like "D%" or name like "E%" or name like "F%" or name like "G%"");

但我不想写好几次

那么有什么简单的方法而不是像写几次一样。

4

3 回答 3

6

你可以试试

mysql_query("select * from users where LOWER(SUBSTR(name, 1, 1)) IN ('a','b','c','d','e','f','g')");
于 2013-10-17T08:14:58.623 回答
5

REGEXP在这里可以很好地工作:

SELECT ........ WHERE `name` REGEXP '^[a-g]'

或者,为了更好地利用索引:

... WHERE `name` < 'G'
于 2013-10-17T08:16:14.447 回答
1

有一些方法可以实现这一点:

首先:您可以使用.. OR LIKE ..语法来完成,就像您所描述的那样。

第二:使用SUBSTRING()传递给IN运算符:

SELECT * FROM t WHERE SUBSTRING(name, 1,1) IN ('A', 'B', 'C')

或使用ORD()

SELECT * FROM t WHERE ORD(SUBSTRING(name, 1,1)) BETWEEN ORD('A') AND ORD('C')

第三:使用正则表达式

SELECT * FROM t WHERE name REGEXP '^[ABC]'
于 2013-10-17T08:17:53.580 回答