2012-06-26 29 views
3

我有一個查詢我一直在嘗試,它應該拉出所有不包含我們不想要的字符的行。在列中查找除允許的字符以外的所有字符

SELECT NID FROM NOTES WHERE NOTE LIKE '%[^0-9a-zA-Z#.;:/^\(\)\@\ \ \\\-]%' 

應該返回不包含

0-9 a-z A-z . : ;^& @ \/() # 

但是,任何時候我添加的這些在它下面一個失敗

$ [ ] ? 

即使想無論是\逃離他們的任何行或[[似乎不能正常工作。我只能訪問股票SQL安裝。

+1

關於此問題的正則表達式標記的註釋。儘管LIKE的一些表達式看起來像正則表達式,但它不是。我是SQL Server自己的正則表達式。 –

+0

「它失敗」:*它如何失敗?你有錯誤嗎?什麼是錯誤信息?或者它運行但結果不正確?您能否顯示一些示例輸入數據,您運行的完整查詢,獲得的錯誤結果以及您想要的結果? –

+0

@MarkByers沒有錯誤信息。它只是不返回任何行,儘管添加了不在允許範圍內的字符(法式風格..等等) – iarp

回答

4

它應該拉動不包含的所有行我們不想要的字符。

要找到包含x您可以使用LIKE行:

SELECT * FROM yourtable WHERE col LIKE '%x%' 

要查找不包含x您可以使用NOT LIKE行:

SELECT * FROM yourtable WHERE col NOT LIKE '%x%' 

所以你查詢應該使用NOT LIKE因爲你wa這不包含東西NT行:

SELECT NID FROM NOTES WHERE NOTE NOT LIKE '%[0-9a-zA-Z#.;:/^\(\)\@\ \ \\\-]%' 

應該返回不包含

0-9 a-z A-z . : ;^& @ \/() # 

因爲^號在開始任何行,它將返回除以外不包含個字符的行。您列出的那些字符是允許的的字符。

+0

我的理解是,脫字符號與單詞NOT的作用相同。任何想法正確逃避[和]? – iarp

+0

@iarp:不,這是兩件完全不同的事情。 'NOT'是一個布爾運算符。在where子句的前面添加它可以更改返回的行(返回*不匹配條件的行)。 '[^ ...]'表示「除......以外的每個字符」。這是不一樣的。您可以通過測試兩者並查看它們給出不同的結果來輕鬆驗證這一點。你首先需要弄清楚基礎知識。在開始研究如何逃避事情之前,試着理解'NOT'的含義以及'[^ ...]'的含義。如果您的基本查詢錯誤,那麼高級部分*絕對*將不起作用。 –

+0

[MS自己的幫助網站](http://msdn.microsoft.com/en-us/library/ms179859.aspx)列出「任何單個字符不在指定範圍內([^ af])或設置([^ abcdef ])「。與描述一起給出的例子符合我在上面做的,而不需要NOT。現在,當我讀你的時候,不像[^ ...],它就像是不會返回[]之間的所有內容。我不需要方括號內的任何內容,因此我使用^而不是不喜歡。 – iarp

相關問題