2014-04-15 36 views
1

我試圖用PATINDEX功能如下:的Transact-SQL勘不起作用

select PATINDEX('%[A-Z].%', 'he.llo MA. asd ' collate Cyrillic_General_CS_AS) 

我希望它返回9,但它返回2 誰能ENLIGHT我有什麼錯?我也嘗試在第一個參數中提供collat​​e,並使用Latin1_General_CS_AS代替Cyrrilic - 結果相同。

+3

重複? http://stackoverflow.com/questions/4212110/range-wildcard-pattern-matching-behaviour-with-case-sensitive-collat​​ions – dean

+0

不是重複的,但絕對是正確的道路。 – xQbert

回答

1

嘗試強制進行BINARY比較,以便逐位進行比較。

這傢伙鏈接有助於解決您的問題。 LINK

我複製你得到2,並與COLLATE Latin1_General_BIN它返回預期9

SELECT PATINDEX('%[A-Z].%', 'he.llo MA. asd ' COLLATE Latin1_General_BIN) 
+0

輝煌,它的作品,謝謝!我也會根據參考文獻中給出的可能的重複發現我的問題 – heximal

+0

很有幫助。很顯然,如果Cryillic是您之前的產品,則只需在最後加上BIN位即可更改爲任何特定的COLLATION。 –

1

這是基於我的任性的解決方法上this SO thread(如果太埃克斯的回答對您沒有幫助) :

select PATINDEX('%[ABCDEFGHIJKLMNOPQRSTUVWXYZ].%', 'he.llo MA. asd ' collate Latin1_General_CS_AS) 
+0

非常有創意的解決方法。 –