识别 SQL 中的特殊字符和数字

Identify Special Characters and numbers in SQL

在我的例子中,我有一个 varchar 变量,例如 Test1@abc。我想识别该字符串中的特殊字符和数字,并 return 它们。此字符串只能包含字母、space 和下划线(a-z、A-Z、space、_)。不允许使用所有其他字符。我想 return 他们。谢谢。

DECLARE @StringVal VARCHAR(250) = 'Test1@abc' 
IF(--condition)
BEGIN
    --output -> 1,@
END

使用正则表达式

DECLARE @StringVal VARCHAR(400) = 'Test1@abc'

DECLARE @expres VARCHAR(50) = '%[^~,@,#,$,%,&,*,(,),.,!,0-9]%'

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

IF(@StringVal LIKE '%[~,@,#,$,%,&,*,(,),.,!,0-9]%')
BEGIN
SELECT @StringVal AS [Special Char]
END
ELSE
SELECT 'No Special Characters'  AS [Non Special Char]

如果你想把刚刚的结果打印出来,你可以使用:

DECLARE @StringVal VARCHAR(400) = 'Test1@abc';  
DECLARE @expres VARCHAR(MAX) = '%[^a-zA-Z_]%';

WHILE @StringVal LIKE @expres
BEGIN
    PRINT SUBSTRING(@stringVal, PATINDEX(@expres, @stringVal), 1);
    SET @stringval = STUFF(@stringVal, 1, PATINDEX(@expres, @stringVal), '');
END;

如果您希望将它们输出为字符串,您可以将它们连接起来:

DECLARE @StringVal VARCHAR(400) = 'Test1@abc';
DECLARE @expres VARCHAR(MAX) = '%[^a-zA-Z_]%';
DECLARE @output VARCHAR(MAX) = '';

WHILE @StringVal LIKE @expres
BEGIN
    SET @output = @output + SUBSTRING(@stringVal, PATINDEX(@expres, @stringVal), 1);
    SET @stringval = STUFF(@stringVal, 1, PATINDEX(@expres, @stringVal), '');
END;

SELECT @output;

Here 是一个 db<>fiddle.