Повторяющиеся символы в 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 3

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 не поддерживает регулярное выражение.

Вы можете использовать SQL CLR для запуска такого выражения.


Также попробуйте функцию LEN :

if (LEN(@var) <= 150)
    print 'OK'
else
    print 'Not OK'  

T-SQL не поддерживает регулярное выражение, ближе всего вы можете получить PATHINDEX функция, которую можно использовать для сопоставления определенных символов, но нельзя указать количество. Вы можете попробовать объединить его с функцией LEN, чтобы проверить длину.

EDIT: Проверьте эту страницу для нескольких примеров PATINDEX.