2011-03-14 75 views
1

我想過濾第一個字母不是字母的VARCHAR列。基於非Alpha的第一個字符過濾SQL查詢

Ex。
值= [ '.NET','30天, '桔子', '測試']

返回[ '.NET','30天]

注:參考這是將名稱按第一個字母分組到過濾器桶中,其中不是字母字符的任何內容都分組爲「#」(請參閱​​iPhone Contacts Browse分組)。

使用LIKE或子字符串對單個字母進行過濾很容易,但我找不到一個簡單的方法來過濾所有非字母字符。

編輯:它是區分大小寫的,但我期待所有的小寫,所有的時間。

回答

8

是解決方案一樣容易:

SELECT * 
FROM SomeTable 
WHERE SomeColumn NOT LIKE '[A-z]%' 

編輯:只是在您使用區分大小寫的排序規則時將[A-Z]更改爲[A-z]。

+0

+1不錯的一個。適用於sql服務器。但它在所有數據庫中是否兼容? – 2011-03-14 18:36:56

+1

我很確定LIKE運算符不僅僅支持T-SQL。我沒有足夠的經驗與其他系統給你一個確定的清單,但我建議嘗試它並報告回來。 – 2011-03-14 18:47:50

+1

'LIKE'是便攜式的。範圍語法不是AFAIK。順便說一下,最好使用''[A-z]%'',這樣它就可以在區分大小寫的字符串如'zebra'上正確工作。 – 2011-03-14 21:00:14

2
select * from table 
where ASCII(Name) NOT BETWEEN 65/* A */ and 90/* Z */ 
AND ASCII(Name) NOT BETWEEN 97 /* a */ AND 122 /* z */ 

您沒有指定flavor,所以這是TSQL,但我相信大多數SQL實現都支持ASCII。內聯註釋字符(/ * * /)可能不同。

+0

+1兼容性正是我的想法。 – 2011-03-14 18:37:21

+0

根本不會使用索引。 LIKE在[SQL標準](http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt)中,* may *至少可以使用索引。在ANSI SQL 92中沒有提到ASCII * – gbn 2011-03-14 18:53:25