简体   繁体   English

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

[英]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;

Here is a db<>fiddle. 是一个 db<>fiddle。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM