1

我有一个表,其中有一列“名称”(varchar)
我想获取名称以“a”、“b”、“c”、“d”、“e”或“f”开头的所有行'。
我已经建立了如下查询:
WHERE LEFT(u.name, 1)='a' OR LEFT(u.name, 1)='b' OR LEFT(u.name, 1)='c' OR LEFT(u.name, 1)='d' OR LEFT(u.name, 1)='e' OR LEFT(u.name, 1)='f'

有没有更好的办法?也许使用正则表达式?
假设我必须为更广泛的范围(A 到 M)做这件事会减慢查询速度吗?

4

3 回答 3

10

尝试使用IN

WHERE LEFT(u.name, 1) IN ('a', 'b', 'c', 'd', 'e', 'f')

通过这种方式,您可以定义任何您想要的起始字符,即使它不是按顺序排列的。

于 2013-05-03T14:39:57.030 回答
3

几乎有太多方法可以做到这一点:)除了其他答案之外,其中任何一个都可以:

u.name >= 'a' AND u.name < 'g'

或者

LEFT(u.name, 1) BETWEEN 'a' AND 'g'

或使用正则表达式:

u.name REGEXP '^[a-f].*'
于 2013-05-03T14:44:37.043 回答
1

怎么了u.name < 'g'

于 2013-05-03T14:40:21.047 回答