簡體   English   中英

識別 SQL 中的特殊字符和數字

[英]Identify Special Characters and numbers in SQL

就我而言,我有一個像Test1@abc這樣的varchar變量。 我想識別該字符串中的特殊字符和數字並返回它們。 此字符串只能包含字母、空格和下划線(az、AZ、空格、_)。 不允許使用所有其他字符。 我想退貨。 謝謝你。

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;

如果您希望將它們 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;

是一個 db<>fiddle。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM