Соответствие строки SQL с лайком - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь проверить строку с похожим шаблоном, который состоит только из следующих символов, и я приближаюсь к нему, но все еще могу обойти мое выражение curernt:

valid characters: numbers 0-9, alphanumeric chars + . = \ 

выражение:

'%[^[0-9A-Za-z+.\_\-\=\\\]]%' ESCAPE '\' 

Но с этим выражением строки в квадратных скобках и символы "-" также считаются правильными. Если я поменяю внутренние скобки на нормальные скобки, вот так

'%[^(0-9A-Za-z+.\_\-\=\\\)]%' ESCAPE '\' 

У меня все та же проблема, но на этот раз с нормальными скобками. Тестовые данные, с которыми я играю:

IF OBJECT_ID('TEMPDB..#temp') IS NOT NULL DROP TABLE #temp
CREATE TABLE #temp(
    string varchar(max),
    expectedResult varchar(max),
    result varchar(max)
)
insert #temp(string,expectedResult)
values
('da)ssdas', 'invalid'),
('DFGHJ§$%', 'invalid'),
('+=8rt8\\//12=+', 'invalid'),
('[BIGBEAR]', 'invalid'),
('BIG-BEAR', 'invalid'),
('x[BIGBEAR]x', 'invalid'),
('(BIGBEAR)', 'invalid'),
('+=8rt8Ahd12=+', 'valid')

update #temp
set result =    CASE WHEN string like '%[^[0-9A-Za-z+.\_\-\=\\\]]%' ESCAPE '\' 
                        THEN 'invalid'
                ELSE'valid'
                END

select * from #temp

результат

string         expectedResult   result
da)ssdas       invalid          invalid
DFGHJ§$%        invalid          invalid
+=8rt8\\//12=+ invalid          invalid
[BIGBEAR]      invalid          valid
BIG-BEAR       invalid          valid
x[BIGBEAR]x    invalid          valid
(BIGBEAR)      invalid          invalid
+=8rt8Ahd12=+  valid            valid

1 Ответ

0 голосов
/ 05 июля 2018

Я думаю, вы просто хотите:

'%[^0-9A-Za-z+.\_\-\=\\]%' ESCAPE '\' 

^ в классе символов применяется ко всем символам. Я бы использовал другой escape-символ для удобства чтения. Дефис в качестве первого символа в классе символов означает дефис, поэтому единственный символ, который необходимо экранировать, - это обратный слеш:

'%[^-0-9A-Za-z+=$\]%' ESCAPE '$' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...