从SQL Server查询中删除特殊字符

时间:2014-07-23 15:50:32

标签: sql sql-server ascii

有没有办法可以消除所有特殊字符'从SQL Server查询?有时候我们的用户会输出奇怪的东西,比如' @'或者'&'在他们的名字领域,我试图消除任何不是数字或字母的东西。这可能吗?

提前致谢。

4 个答案:

答案 0 :(得分:1)

我会在这里使用答案:

How to strip all non-alphabetic characters from string in SQL Server?

如果您无法创建函数,则可以在查询中使用函数的代码。

答案 1 :(得分:1)

最好的办法,如果可能的话,就是在你进入SQL Server之前这样做。 SQL Server不是字符串操作的最佳工具。中间层的RegEx可以很好地处理它,或者您可以使用RegEx在SQL中使用CLR。不确定后者的表现,因此需要进行测试。

答案 2 :(得分:0)

没有开箱即用的解决方案,但是以下功能应该这样做:

CREATE FUNCTION dbo.RemoveSpecial (@S VARCHAR(256)) RETURNS VARCHAR(256)
   WITH SCHEMABINDING
BEGIN
   IF @S IS NULL
      RETURN NULL
   DECLARE @S2 VARCHAR(256)
   SET @S2 = ''
   DECLARE @L INT
   SET @L = LEN(@S)
   DECLARE @P INT
   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
         SET @S2 = @S2 + CHAR(@C)
      SET @P = @P + 1
      END
   IF LEN(@S2) = 0
      RETURN NULL
   RETURN @S2
   END

更新:

您可以使用一系列REPLACE语句。

SELECT REPLACE([ColumnName]
      REPLACE(
        REPLACE(
          REPLACE(
            REPLACE(
              REPLACE(
                REPLACE(
                  REPLACE(
                    REPLACE(
                      REPLACE(
                        @String,
                      '9', ''),
                    '8', ''),
                  '7', ''),
                '6', ''),
              '5', ''),
            '4', ''),
          '3', ''),
        '2', ''),
      '1', ''),
    '0', '') FROM [TableName]

答案 3 :(得分:0)

DECLARE @str VARCHAR(25)
SET @str = '@#@@#%@mohan2655&$E##'
WHILE PATINDEX( '%[~,@,#,$,%,&,*,(,)]%', @str ) > 0
          SET @str = Replace(REPLACE( @str, SUBSTRING( @str, PATINDEX( '%[~,@,#,$,%,&,*,(,)]%', @str ), 1 ),''),'-',' ')
SELECT @str
根据您的要求,

可能有效!!!!