sqlite 按字母范围选择

tsm1rwdh  于 2023-08-06  发布在  SQLite
关注(0)|答案(5)|浏览(106)

students我尝试按字母名称对范围A-M中的字母进行排序:
x1c 0d1x的数据



我试过了

SELECT *  FROM student  WHERE student_first_name like '[A-M]%';

字符串
它什么都没给我。

s71maibg

s71maibg1#

您正在使用SQLite,它支持GLOB运算符,您可以使用[x-y]列表通配符和*而不是%

SELECT * FROM student WHERE student_first_name GLOB '[A-M]*';

字符串
请注意,GLOB区分大小写。
如果您想要不区分大小写的结果,请用途:

SELECT * FROM student WHERE UPPER(student_first_name) GLOB '[A-M]*';

ubby3x7f

ubby3x7f2#

SQLight LIKE仅支持%_。对于你正在尝试做的事情,你可以使用GLOB代替。
GLOB运算符类似于LIKE运算符。与LIKE运算符不同,GLOB运算符区分大小写并使用UNIX通配符。

ymzxtsji

ymzxtsji3#

LIKE运算符不支持字符类,只支持通配符。
要获取所有以A-M开头的名称,您可以

  • 使用13个LIKE表达式并对它们进行OR

where last_name like 'A%' or last_name like 'B%' or ... or last_name like 'M%'

  • 使用RDBMS特有的正则表达式匹配

where last_name ~ '^[A-M]'

  • 使用RDBMS的函数获取字符串的第一个字符,并将其与IN列表进行比较

where substr(last_name, 1, 1) in ('A', 'B', ..., 'M')
SQL Fiddle(PostgreSQL)

qvsjd97n

qvsjd97n4#

你的版本没有工作,因为你要求它给予你所有的学生,他们的名字以方括号开头,它正确地告诉你没有。
除了其他答案,您还可以使用Where first_name between 'A' And 'N' And first_name<'N'
这个版本通过使用first_name列上可能存在的任何索引来获得更快的速度,因为您没有对它执行计算。

a11xaf1n

a11xaf1n5#

不确定在SQL,但我已经测试了下面的查询在MySQL它的工作对我来说很好.
请像下面这样使用REGEXP

SELECT * FROM student  WHERE student_first_name REGEXP '^[A-M]';

字符串

相关问题