2010-05-17 126 views

回答

1

這是使用ASCII字符範圍去除特殊字符的函數。 小心:在高容量產品環境中實施之前,請確保對其進行測試並對CPU使用率感到滿意。

此功能由基督教德Heureuse

CREATE FUNCTION dbo.RemoveSpecialChars (@s VARCHAR(256)) 
RETURNS VARCHAR(256) 
    WITH SCHEMABINDING 
BEGIN 
    IF @s is null 
     RETURN null 

    DECLARE @s2 varchar(256) 
    DECLARE @l int 
    DECLARE @p int 


    SET @s2 = '' 
    SET @l = len(@s) 

    SET @p = 1 

     WHILE @p <= @l 
     BEGIN 

      DECLARE @c int 
      SET @c = ascii(substring(@s, @p, 1)) 
      IF @c between 48 and 57 or @c between 65 and 90 or @c between 97 and 122 
      BEGIN 
        SET @s2 = @s2 + char(@c) 
      END 
      SET @p = @p + 1 
     END 


     IF LEN(@s2) = 0 
     BEGIN 
      RETURN null 
     END  

     RETURN @s2 

END 
+0

加里從source-code.biz/snippets/mssql/1.htm修改,請尊重我的署名權,並指出這是在我的函數的修改版本http://www.source-code.biz/ snippets/mssql/1.htm – 2012-10-07 18:13:52

+0

基督徒,我很高興地承認你是源頭。 – 2012-10-07 20:58:20

2

嵌套replace

REPLACE(REPLACE(REPLACE(value, '$', ''), '"', ''), ':', '') 

真的,這不是T-SQL擅長

1

雖然這 「唯一內置功能」 違反使用的定義,因爲它依賴於WSH,所以this posting中列出的功能是獲得正則表達式到SQL 2000的一種方法,並且可以擴展以支持替換等。雖然這不是純粹的TSQL,但它不應該要求任何新的軟件或擴展在t上他服務器(儘管許多DBA會鎖定COM腳本存儲過程)。

否則,gbn提到,唯一可用的本地TSQL操作是一大堆REPLACE s。