MSSQL Регулярное выражение
У меня есть следующий 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*
3 ответа
Спасибо за вашу помощь.
Это то, что я использовал в конце:
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
В MySQL синтаксис регулярного выражения следующий:
SELECT * FROM YourTable WHERE (`url` NOT REGEXP '^[-A-Za-z0-9/.]+$')
Использовать REGEXP
пункт вместо LIKE
, Последнее для сопоставления с образцом с использованием %
а также _
подстановочные знаки.
SQL Server
Поскольку вы сделали опечатку и используете SQL Server (не MySQL), вам придется создать пользовательскую функцию CLR, чтобы предоставить функциональность регулярного выражения.
Посмотрите на эту статью для более подробной информации.
Использование REGEXP
не LIKE
:
SELECT * FROM `table` WHERE ([url] NOT REGEXP '^[-A-Za-z0-9/.]+$')