1

我想显示来自名称的 db 表的结果,我只想显示带有初始 A - D 的名称,例如以 a、b、c 和 d 开头。我想知道我们是否可以在 LIKE 子句中使用多个值,例如 LIKE a%,b%,c%,d%。我想知道它是否会起作用,是否有更合适的方法来实现这一点。

4

5 回答 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 FROMWHERE 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]';`

你可以在这里找到更多:

http://dev.mysql.com/doc/refman/5.6/en/regexp.html

于 2013-08-02T17:42:26.910 回答