【问题标题】:SQL code to find and suppress numbers and special characters用于查找和抑制数字和特殊字符的 SQL 代码
【发布时间】:2020-04-22 01:12:10
【问题描述】:

我想在我的 SQL 代码中包含/修改以消除以下字符:'&% - 单引号 -&符号 -百分比

我需要在当前的正则表达式中包含任何这些字符。 提前致谢

DECLARE @counter int;
SET @counter = 0
WHILE(@counter < (SELECT MAX(ID_COLUMN) FROM [dbo].[zzIntegriyCheckV4HistoryClient_TEMP]))

BEGIN  
    IF  EXISTS (SELECT * FROM  [dbo].[zzIntegriyCheckV4HistoryClient_TEMP] WHERE MESSAGE NOT LIKE '% must be between %')
    WHILE 1 = 1
    BEGIN

        DECLARE @RetVal varchar(50)

        SET @RetVal =  (SELECT MESSAGE = STUFF(MESSAGE, PATINDEX('%[0-9()$%&/.:!]%', MESSAGE),1, '')
        FROM [dbo].[zzIntegriyCheckV4HistoryClient_TEMP]
        WHERE ID_COLUMN = @counter)

        IF(@RetVal IS NOT NULL)       
          UPDATE [dbo].[zzIntegriyCheckV4HistoryClient_TEMP] SET MESSAGE = @RetVal WHERE ID_COLUMN = @counter
        ELSE
            break
    END

    SET @counter = @counter + 1
END

【问题讨论】:

  • 如果您阅读了您添加的 SQL 标记的说明,它鼓励您为正在使用的特定 DBMS 添加标记,因为它们之间的功能和语法不同。请edit您的帖子这样做。
  • 标签 [tsql] 指向 SQL Server(虽然这不确定)。您可能会阅读about TRANSLATE()(需要 v2017+)

标签: sql regex tsql


【解决方案1】:

这是一个盲目的尝试,因为您没有指定您的 RDBMS。但假设您的 [tsql] 指向 SQL-Server 并且您的版本为 v2017+,您可以试试这个:

--一些混乱的输入

DECLARE @input VARCHAR(100)='abc123(33)%&$.def,,3xyz';

--你想去掉的所有字符的列表

DECLARE @notWanted VARCHAR(100)='0123456789!"§$%&/()=?*+-_#''<>@€,.;:';

--一个中间占位符(任何被禁止的字符)

DECLARE @useInstead CHAR(1)='~';

--这里可以看到TRANSLATE()的工作

SELECT TRANSLATE(@input,@notWanted,REPLICATE(@useInstead,LEN(@notWanted)));
--> abc~~~~~~~~~~~~def~~~xyz

--现在你可以使用一个简单的REPLACE()

SELECT REPLACE(TRANSLATE(@input,@notWanted,REPLICATE(@useInstead,LEN(@notWanted))),@useInstead,'')
--> abcdefxyz

提示:在有人开始使用递归 CTE、循环、计数列表等提供大量答案之前,请提供更多详细信息。
您可能会阅读this answer,其中我提供了一个单独处理每个字符的函数。您可以根据自己的需要进行调整。

【讨论】:

    猜你喜欢
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多