如何使用正则表达式从列名字符串中删除所有特殊字符

swe*_*ety 4 regex sql t-sql sql-server

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

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

谢谢。

Thi*_*agu 5

尝试这个:

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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

输出/输出

SELECT dbo.Remove_SpecialCharacters(COLUMNNAME),* FROM TABLENAME
Run Code Online (Sandbox Code Playgroud)