2013-05-15 35 views
1

參見下面的例子帽符號(^)不能正常工作

where '1|2|||1|' like '%%|%%|%%|%%|[^3]|' /* it will return true if the string between last two pipe symbols is not like '3'*/ 

上面的代碼只是正常工作。

以同樣的方式,我需要爲最後兩個管道之間的字符串建立一個表達式,而不是像10或11那樣。或者至少不是像10那樣。所以像下面這樣嘗試。

where '1|2|||8|' like '%%|%%|%%|%%|[^10]|' 

上面的語句爲1,0返回false和10,而不是僅僅10.因此上述查詢認爲1作爲單獨的字符串和0作爲一個單獨的字符串。 我期待一個表達式,只有當最後兩個管道之間的字符串是10時,纔會返回false。對於1或0不是。

我也嘗試使用大括號。但它的行爲有所不同。

where '1|2|||8|' like '%%|%%|%%|%%|[{^10}]| 

此外,如果你可以得到一個表達 - 最後兩管之間的字符串不應該是10或11

注:我不能用 'OR' 或在 'NOT LIKE'查詢。

任何想法?

回答

2

您需要檢查每個字符分別

像 「......不是1後面沒有(0或1)」

where '1|2|||8|' like '%%|%%|%%|%%|[^1][^01]|' 
+0

感謝您的回答。但我需要一個表達式,它應該返回1和0的真值,假的值爲10. – Maximus

+0

@Sivakumar:LIKE不會允許這樣做,它不是那麼強大。你說你不能有NOT或OR,所以我會建議一個CLR函數來允許正則表達式 – gbn

+0

是的,我也使用了正則表達式,就像你在我的問題中看到的那樣。它不適用於多個數字。事情需要知道在正則表達式中將字符分組爲單個字符串的方式。 – Maximus