2013-05-03 1484 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].*' 
相關問題