2013-05-03 1485 views
1

我有一个具有'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'SQL查询以获得以A或B或C ..开头的名称到F

有没有更好的办法?使用正则表达式也许?
并且我们假设我必须为更宽的范围(A到M)执行它是否会减慢查询速度?

回答

9

尝试用这种方法你可以定义任何起始字符使用IN

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

你想,即使它没有先后顺序。

+0

确实!我忘了IN! – 2013-05-03 14:43:50

+0

@downvoter你有这么多的机会downvote我的答案。显然':''开心下调。 – 2013-05-06 00:06:59

1

u.name < 'g'有什么问题?

+2

这具有可以在名称列上使用索引的优点。 – 2013-05-03 14:58:09

3

有几乎太多的方法可以做到这一点:)除了其他的答案,他们都会让你的工作:

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

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

或用正则表达式:

u.name REGEXP '^[a-f].*' 
相关问题