2010-02-03 47 views

回答

0

如果你想從一個字符串去掉所有的數字,有各種可能方式:

1)純TSQL:

例如(不一定是最好的/最漂亮的方式)

DECLARE @Test VARCHAR(50) 
SET @Test = 'Test12value8with numbers' 

DECLARE @index INTEGER 
SELECT @index = PATINDEX('%[0-9]%', @Test) 

WHILE (@index > 0) 
    BEGIN 
     SET @Test = LEFT(@Test, @index - 1) + RIGHT (@Test, (LEN(@Test) - @index)) 
     SELECT @index = PATINDEX('%[0-9]%', @Test) 
    END 

SELECT @Test 

2)CLR功能(SQL 2005+) - 創建一個CLR函數做替換(即.NET),並調用該函數

3 )根本不要在SQL中進行操作,原樣返回數據並將格式化/清理保留給調用代碼(這將在字符串操作中更好地執行)。

第三種選擇將是我自然會去的,除非有充分理由不這樣做。

0

SQL Server本身不支持REPLACE()函數中的正則表達式。在嘗試這些方法之一:

  1. Leverage .NET regex support by integrating SQL Server and the CLR
  2. 編寫通過串迴路,並使用PATINDEX()定位號(PATINDEX讓你指定一個模式來查找存儲過程或用戶定義的函數,更換不不)

這兩個都有一些性能影響,所以我會小心你如何使用它們。

+0

阿格,AdaTheDev擊敗我的答覆。在我的列表中查看該答案,以查看選項#2的示例。 – 2010-02-03 14:02:23