Table
students
我正在尝试按 A-M 范围内的字母名称进行排序:
我已经尝试过:
SELECT * FROM student WHERE student_first_name like '[A-M]%';
它没有给我任何东西。
GLOB
运算符的 SQLite,您可以在其中使用 [x-y]
列表通配符和 *
而不是 %
:
SELECT * FROM student WHERE student_first_name GLOB '[A-M]*';
请注意,
GLOB
区分大小写。如果您想要不区分大小写的结果,请使用:
SELECT * FROM student WHERE UPPER(student_first_name) GLOB '[A-M]*';
SQLight LIKE 仅支持
%
和 _
。对于您想要做的事情,您可以使用 GLOB 代替。
GLOB 运算符与 LIKE 运算符类似。与 LIKE 运算符不同,GLOB 运算符区分大小写并使用 UNIX 通配符。
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')
您的版本不起作用,因为您要求它提供所有姓名以方括号开头的学生,而它正确地告诉您没有。
除了其他答案之外,您还可以使用
Where first_name between 'A' And 'N' And first_name<'N'
。
通过使用first_name列上可能存在的任何索引,此版本更有可能更快,因为您没有对其执行计算。
在 SQL 中不确定,但我在 MySQL 中测试了以下查询,它对我来说工作得很好。
请使用
REGEXP
,如下所示:
SELECT * FROM student WHERE student_first_name REGEXP '^[A-M]';