Регулярное выражение 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*

Ответ 1

Спасибо всем за вашу помощь.

Это то, что я использовал в конце:

SELECT *, 
  CASE WHEN [url] NOT LIKE '%[^-A-Za-z0-9/.+$]%' 
    THEN 'Valid' 
    ELSE 'No valid' 
  END [Validate]
FROM 
  *table*
  ORDER BY [Validate]

Ответ 2

Отказ от ответственности: Оригинальный вопрос касался MySQL. Ответ SQL Server ниже.

MySQL

В MySQL синтаксис regex следующий:

SELECT * FROM YourTable WHERE (`url` NOT REGEXP '^[-A-Za-z0-9/.]+$') 

Используйте предложение REGEXP вместо LIKE. Последний используется для сопоставления с шаблонами % и _.


SQL Server

Поскольку вы сделали опечатку, и вы используете SQL Server (а не MySQL), вам нужно создать определенную пользователем функцию CLR, чтобы выставить функциональность регулярного выражения.

Посмотрите эту статью для более подробной информации.

Ответ 3

Используйте REGEXP, а не LIKE:

SELECT * FROM `table` WHERE ([url] NOT REGEXP '^[-A-Za-z0-9/.]+$')