【问题标题】:How to remove all special characters from a column name string using regular expressions如何使用正则表达式从列名字符串中删除所有特殊字符
【发布时间】:2021-03-13 02:41:59
【问题描述】:

我想从 SQL Server 2018 中我的表的列名中删除所有特殊字符,如 $、%、# 等。 如何借助正则表达式来做到这一点?

如果我的列中的值为“S$d#@gh”,则输出应为--“Sdgh”

谢谢。

【问题讨论】:

  • SQL Server 没有正则表达式......您可以尝试替换每个要删除的字符。或者你可以写一个 CLR 函数。
  • 您使用哪个 SQL Server 版本?
  • @Zhorov 我使用 sql server 2018
  • @sweety 这可能是 SQL Management Studio(客户端工具)的版本。执行SELECT @@VERSION 以获取当前安装的 SQL Server 的系统和构建信息。

标签: sql sql-server regex tsql


【解决方案1】:

试试这个:

DECLARE @str VARCHAR(400)='S$d#@gh'
DECLARE @expres  VARCHAR(50) = '%[~,@,#,$,%,&,*,(,),.,!]%'

WHILE PATINDEX( @expres, @str ) > 0
SET @str = Replace(REPLACE( @str, SUBSTRING( @str, PATINDEX( @expres, @str ), 1 ),''),'-',' ')
SELECT @str

您可以创建一个标量函数并传递此列

CREATE FUNCTION dbo.Remove_SpecialCharacters( @str VARCHAR(MAX))
RETURNS VARCHAR(MAX) AS
BEGIN
DECLARE @expres  VARCHAR(50) = '%[~,@,#,$,%,&,*,(,),.,!]%'

WHILE PATINDEX( @expres, @str ) > 0
SET @str = Replace(REPLACE( @str, SUBSTRING( @str, PATINDEX( @expres, @str ), 1 ),''),'-',' ')
RETURN @str
END

O/P

SELECT dbo.Remove_SpecialCharacters(COLUMNNAME),* FROM TABLENAME

【讨论】:

  • studentName 列的所有值如何使用?
  • @sweety - 请立即查看
  • @sweety 如果这回答了您的问题,请使用左侧的复选标记接受它,并考虑对其进行投票。这也适用于您之前的问题。
【解决方案2】:

SQL Server 现在支持translate()。这使您可以:

select replace(translate(column, ',~@#$%&*().!', replace(' ', 12)), ' ', '')

唯一的技巧是替换的空格字符串需要与您要查找的字符的长度完全相同。

【讨论】:

    【解决方案3】:

    首先用一个不需要的字符替换所有不需要的字符,然后用空格替换它:

    select replace(translate('foo$#@bar', '$#@', '$$$'), '$', '')
    

    输出:

    foobar 
    

    live demo

    【讨论】:

      【解决方案4】:

      检查这个链接,这个链接对我有用,我需要删除字母字符和特殊字符,所以我只剩下数字了。 https://www.c-sharpcorner.com/blogs/how-to-remove-characters-special-symbol-from-string-using-sql-function

      Create function [dbo].[RemoveCharSpecialSymbolValue](@str varchar(500))  
      returns varchar(500)  
      begin  
      declare @startingIndex int  
      set @startingIndex=0  
      while 1=1  
      begin  
      set @startingIndex= patindex('%[^0-9.]%',@str)  
      if @startingIndex <> 0  
      begin  
      set @str = replace(@str,substring(@str,@startingIndex,1),'')  
      end  
      else break;  
      end  
      return @str  
      end   
      

      然后使用@Thiyagu Select Function(Column) 解决方案

      【讨论】:

        猜你喜欢
        • 2011-03-19
        • 1970-01-01
        • 1970-01-01
        • 2016-05-26
        • 2017-12-11
        • 2017-06-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多