【问题标题】:Eliminating Special Characters From a SQL Server Query [duplicate]从 SQL Server 查询中消除特殊字符 [重复]
【发布时间】:2014-09-14 22:00:04
【问题描述】:

有没有一种方法可以消除 SQL Server 查询中的所有“特殊字符”?有时我们的用户会在他们的姓名字段中添加一些奇怪的东西,例如“@”或“&”,我试图消除任何不是数字或字母的东西。这可能吗?

提前致谢。

【问题讨论】:

  • “消除”到底是什么意思?使查询错误,或删除字符或...?
  • 你会允许名字中的数字吗???
  • 好吧,如果有人输入像“Joe & Susan”或“@Sam”这样的名字,我想要一份由这些行组成的报告,因为它们需要修复。我确信有办法做到这一点,但我无法弄清楚。我想要列出任何特殊字符以进行更正,因此我不必逐个查找。 (& 和 @ 只是不应允许的两个字符示例)。数字没问题。
  • 无论您使用什么应用程序,您都能在处理 SQL 查询之前发现错误吗?通常你会在它被插入之前过滤掉它。
  • 消除“任何非数字或字母”将错误地标记完全有效的名称,如“Cox-Arquette”(连字符)、“Dell'Abate”(撇号)和“Van Slyke”(空格)。 非常小心处理。

标签: sql sql-server ascii


【解决方案1】:

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

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]

【讨论】:

  • 我没有创建任何函数的权限。有没有其他方法可以做到这一点,还是我必须让 DBA 来实现这个?不过还是谢谢。
  • 这里的类似问题已经回答stackoverflow.com/questions/1007697/…
【解决方案2】:
DECLARE @str VARCHAR(25)
SET @str = '@#@@#%@mohan2655&$E##'
WHILE PATINDEX( '%[~,@,#,$,%,&,*,(,)]%', @str ) > 0
          SET @str = Replace(REPLACE( @str, SUBSTRING( @str, PATINDEX( '%[~,@,#,$,%,&,*,(,)]%', @str ), 1 ),''),'-',' ')
SELECT @str

也许这行得通!!!!根据您的要求

【讨论】:

    【解决方案3】:

    我会在这里使用答案:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2020-12-01
        • 1970-01-01
        • 2019-12-22
        • 2013-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-20
        相关资源
        最近更新 更多