MSSQL正则表达式

时间:2015-03-23 09:04:01

标签: sql sql-server regex

我有以下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 个答案:

答案 0 :(得分:15)

  

免责声明:最初的问题是关于MySQL。 SQL Server答案如下。

的MySQL

在MySQL中,正则表达式语法如下:

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

使用REGEXP子句代替LIKE。后者用于使用%_通配符进行模式匹配。


SQL Server

由于您输了一个拼写错误,并且您正在使用SQL Server(而不是MySQL),因此您必须创建一个用户定义的CLR函数来公开正则表达式功能。

请查看this article了解详情。

答案 1 :(得分:15)

谢谢大家的帮助。

这是我最后使用的:

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

答案 2 :(得分:-2)

使用REGEXP,而不是LIKE

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