[英]Identify Special Characters and numbers in SQL
In my case, I have a varchar
variable like Test1@abc
.就我而言,我有一个像
Test1@abc
这样的varchar
变量。 I want to identify the special characters and numbers in that string and return them.我想识别该字符串中的特殊字符和数字并返回它们。 This string can only include alphabetic letters, space, and underscore (az, AZ, space,_).
此字符串只能包含字母、空格和下划线(az、AZ、空格、_)。 All other characters are not allowed.
不允许使用所有其他字符。 I want to return them.
我想退货。 Thank you.
谢谢你。
DECLARE @StringVal VARCHAR(250) = 'Test1@abc'
IF(--condition)
BEGIN
--output -> 1,@
END
Using Regex使用正则表达式
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]
If you want the results just printed out, you can use:如果您想要刚刚打印出来的结果,您可以使用:
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;
If you want them output as a string, you can concatenate them:如果您希望将它们 output 作为字符串,您可以将它们连接起来:
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.