Ответ 1
Спасибо всем за вашу помощь.
Это то, что я использовал в конце:
SELECT *,
CASE WHEN [url] NOT LIKE '%[^-A-Za-z0-9/.+$]%'
THEN 'Valid'
ELSE 'No valid'
END [Validate]
FROM
*table*
ORDER BY [Validate]
У меня есть следующий REGEX: ^ [- A-Za-z0-9/.]+$
В настоящее время проверяется, соответствует ли значение, введенное в текстовое поле. Если нет, это вызывает ошибку.
Мне нужно проверить, нет ли чего-либо уже в базе данных, которая не соответствует этому.
Я устал:
SELECT * FROM *table* WHERE ([url] NOT LIKE '^[-A-Za-z0-9/.]+$')
SELECT * FROM *table* WHERE PATINDEX ('^[-A-Za-z0-9/.]+$', [url])
ОБНОВЛЕНИЕ
Итак, после небольшого исследования я понял, что не могу использовать REGEXP.
Я думал, что смогу сделать что-то подобное? Это не дает мне ожидаемых результатов, но он работает в отличие от всего остального. Может ли кто-нибудь обнаружить что-то не так с этим?
SELECT *,
CASE WHEN [url] LIKE '^[-A-Za-z0-9/.]+$'
THEN 'Match'
ELSE 'No Match'
END Validates
FROM
*table*
Спасибо всем за вашу помощь.
Это то, что я использовал в конце:
SELECT *,
CASE WHEN [url] NOT LIKE '%[^-A-Za-z0-9/.+$]%'
THEN 'Valid'
ELSE 'No valid'
END [Validate]
FROM
*table*
ORDER BY [Validate]
Отказ от ответственности: Оригинальный вопрос касался MySQL. Ответ SQL Server ниже.
В MySQL синтаксис regex следующий:
SELECT * FROM YourTable WHERE (`url` NOT REGEXP '^[-A-Za-z0-9/.]+$')
Используйте предложение REGEXP
вместо LIKE
. Последний используется для сопоставления с шаблонами %
и _
.
Поскольку вы сделали опечатку, и вы используете SQL Server (а не MySQL), вам нужно создать определенную пользователем функцию CLR, чтобы выставить функциональность регулярного выражения.
Посмотрите эту статью для более подробной информации.
Используйте REGEXP
, а не LIKE
:
SELECT * FROM `table` WHERE ([url] NOT REGEXP '^[-A-Za-z0-9/.]+$')