2009-09-23 62 views
5

我有一個字段包含'Blah-OVER','Blah-OveR'等字符串,並且希望在沒有'over'的情況下選擇它們。這僅捕獲第一種情況(這麼說),而不是其他人:SQL Server 2000中不區分大小寫的REPLACE()

SELECT field as "before", REPLACE(field, 'OVER', '') as "after" 

如何我只是讓他們所有說「Blah-」(保持一個什麼樣的左邊的情況下),而不試圖覆蓋所有的情況下與另一個嵌套REPLACE函數結合使用?

+0

謝謝,Remus,我正在尋找合適的標籤,但沒有嘗試過這種組合。 – Kev 2009-09-23 20:38:53

回答

8

使用不區分大小寫的歸類:

SELECT field as "before", REPLACE(field COLLATE SQL_Latin1_General_Cp1_CI_AI 
, 'OVER', '') as "after" 

的歸類名的列表,請參閱COLLATE所以您選擇適合您的數據的場合不合適。

更新

好了,我錯過了你的實際要求(輸入的變化的情況下,沒有發現不區分大小寫)。正確的解決方案是...不要改變輸入,但要爲數據使用適當的排序規則。如果數據必須以特定格式顯示,請使用客戶端中的顯示選項,例如。 CSS text-transform:uppercase,不在服務器SELECT中。

沒有任何內置的SQL函數可以在原地進行此轉換,但構建使用RegExCLR function並不重要。 (在SQL 2005上,不是在SQL 2000上...... doh,我需要更多的咖啡)。

+0

這個語法對我來說是新的!謝謝! – Kev 2009-09-23 20:44:03

0

我不熟悉SQL Server,但也許它可以讓你使用正則表達式。這些通常提供不區分大小寫的模式(通過i-flag設置)。

否則,在替換呼叫之前,您可以使用大寫字母,例如

SELECT field as "before", REPLACE(UPPER(field), 'OVER', '') as "after" 
+0

它產生'BLAH-'。所以它不僅通過替換'OVER'來改變輸入字符串。 – 2009-09-23 20:40:23

+0

我遇到過的一個站點建議您在2000年需要安裝一些自定義DLL以使用正則表達式。此外,它返回所有'blah的大寫 - 抱歉,我應該指定在問題中編輯。 – Kev 2009-09-23 20:41:24