我想显示来自名称的 db 表的结果,我只想显示带有初始 A - D 的名称,例如以 a、b、c 和 d 开头。我想知道我们是否可以在 LIKE 子句中使用多个值,例如 LIKE a%,b%,c%,d%。我想知道它是否会起作用,是否有更合适的方法来实现这一点。
问问题
240 次
5 回答
3
您可以使用由以下LIKE
分隔的多个子句OR
:
SELECT * FROM names WHERE name LIKE 'A%' OR name LIKE 'B%' OR name LIKE 'C%' OR name LIKE 'D%'
或者您可以使用正则表达式 ( REGEXP
):
SELECT * FROM names WHERE name REGEXP '^[A-Da-d]'
编辑
UCASE
这是使用,SUBSTR
和的另一种方法IN
:
SELECT * FROM names WHERE UCASE(SUBSTR(name, 1, 1)) IN ('A', 'B', 'C', 'D')
于 2013-08-02T17:41:37.690 回答
1
我认为最紧凑的方式是:
select t.*
from t
where left(name, 1) in ('A', 'B', 'C', 'D')
或者,甚至更短:
select t.*
from t
where left(name, 1) between 'A' and 'D';
请注意,尽管这些是大写字母,但比较可能不区分大小写(MySQL 上的默认设置),因此 'a'、'b'、'c' 和 'd' 将匹配这些。
或者,您可以使用有些深奥的方法使其更短:
select t.*
from t
where name >= 'A' and name < 'E';
于 2013-08-02T17:53:40.217 回答
0
我可以快速弄清楚的一个简单方法是:
SELECT field_a FROM
表WHERE field_a like 'a%' OR field_a like 'b%' OR field_a like 'c%' OR field_a like 'd%'
于 2013-08-02T17:43:45.640 回答
0
select t.* from t where name between 'A' and 'E';
应该管用
于 2013-08-02T18:54:42.187 回答
0
%
通配符用于表示任何字符,因此可能不是您想要的。
更好的方法是使用 mysql REGEXP
,这样你的查询就变成了:
SELECT x, y, z FROM people WHERE first_name REGEXP '^[A-z]';`
你可以在这里找到更多:
于 2013-08-02T17:42:26.910 回答