识别 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.
在我的例子中,我有一个 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.