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/.]+$')
Другие вопросы по тегам