2010-05-17 131 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。