我有一个表'name'(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)它会减慢查询速度吗?
答案 0 :(得分:9)
尝试使用IN
WHERE LEFT(u.name, 1) IN ('a', 'b', 'c', 'd', 'e', 'f')
通过这种方式,您可以定义所需的任何起始字符,即使它不是按顺序排列的。
答案 1 :(得分:3)
有太多的方法可以做到这一点:)除了其他答案,其中任何一个都有效:
u.name >= 'a' AND u.name < 'g'
或
LEFT(u.name, 1) BETWEEN 'a' AND 'g'
或使用正则表达式:
u.name REGEXP '^[a-f].*'
答案 2 :(得分:1)
u.name < 'g'
出了什么问题?