В моем случае у меня есть переменная varchar
, такая как Test1@abc
. Я хочу определить специальные символы и числа в этой строке и вернуть их. Эта строка может содержать только буквы алфавита, пробел и знак подчеркивания (a-z, A-Z, пробел, _). Все остальные символы не допускаются. Я хочу вернуть их. Спасибо.
DECLARE @StringVal VARCHAR(250) = 'Test1@abc'
IF(--condition)
BEGIN
--output -> 1,@
END
Кроме того, срок службы SQL Server 2008 истек более года назад, поэтому вам действительно следует рассмотреть пути обновления как можно скорее.
Использование регулярных выражений
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 @expres VARCHAR(50) = '%[a-zA-Z]%' - мы можем включить алфавиты как в объявление, так и в условное Проверить (если) stmts
Если вы хотите, чтобы результаты были просто распечатаны, вы можете использовать:
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;
Здесь db<>рабочий пример.
Если строка «может включать только буквы алфавита, пробел и знак подчеркивания (az, AZ, пробел, _)», то почему там только символы? Ясно, что разрешено.