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