Повторяющиеся символы в T-SQL, как условие
Задача:
Ограничьте значение переменной VARCHAR
(или столбца) цифрами и символами ASCI, но разрешите переменную длину.
Этот скрипт не даст требуемого результата:
declare @var as VARCHAR (150)
select @var = '123ABC'
if (@var LIKE '[a-zA-Z0-9]{0,150}')
print 'OK'
else
print 'Not OK'
Кто-нибудь знает, как это сделать?
4 ответа:
Вы можете сделать это с помощью выражения not carat ^ и not LIKE.
Так вы говорите, где не нравится не буквенно-цифровой ;) это работает для стандартных чисел и символов:
declare @var as VARCHAR (150) select @var = '123ABC' if (@var NOT LIKE '%[^a-zA-Z0-9]%') print 'OK' else print 'Not OK'
Edit: спасибо Мартину за подсказку по сортировке, если вы хотите, чтобы символы, такие как ý, рассматривались как не буквенно-цифровые, добавьте в сортировку, как показано ниже
declare @var as VARCHAR (150) select @var = '123ABCý' if (@var NOT LIKE '%[^a-zA-Z0-9]%' COLLATE Latin1_General_BIN ) print 'OK' else print 'Not OK'
Поможет ли это
Declare @t table (Alphanumeric VARCHAR(100)) Insert Into @t Select '123ABCD' Union All Select 'ABC' Union All Select '123' Union All Select '123ABCý' Union All Select 'a-z123' Union All Select 'abc123' Union All Select 'a1b2c3d4' SELECT Alphanumeric FROM @t WHERE Alphanumeric LIKE '%[a-zA-Z0-9]%' AND ( Alphanumeric NOT LIKE '%[^0-9a-zA-Z]%' COLLATE Latin1_General_BIN) AND LEN(Alphanumeric)> 6 -- display records having more than a length of 6
/ / Результат
Буквенно-цифровой
123ABCD a1b2c3d4
N. B.~ использовал подсказку Мартина по сортировке..Спасибо
T-SQL не поддерживает регулярное выражение, ближе всего вы можете получить
PATHINDEX
функция, которую можно использовать для сопоставления определенных символов, но нельзя указать количество. Вы можете попробовать объединить его с функциейLEN
, чтобы проверить длину.EDIT: Проверьте эту страницу для нескольких примеров
PATINDEX
.