MSSQL正则表达式

Cla*_*ton 17 regex sql sql-server

我有以下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])
Run Code Online (Sandbox Code Playgroud)

UPDATE

经过一些研究后我才意识到我不认为我可以使用REGEXP.

我以为我可以做这样的事情?它没有给我预期的结果,但它的运行不同于其他任何东西.任何人都可以发现它有什么问题吗?

SELECT *, 
  CASE WHEN [url] LIKE '^[-A-Za-z0-9/.]+$' 
    THEN 'Match' 
    ELSE 'No Match' 
  END Validates
FROM 
  *table*
Run Code Online (Sandbox Code Playgroud)

Cla*_*ton 17

感谢大家的帮助.

这就是我最后使用的:

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

  • 我非常确定答案不能按预期工作,因为MS-SQL仅支持非常有限的RegExp子集,例如运算符:https://msdn.microsoft.com/en-us/library/ms187489(v = sql.105 ).aspx,因此[]中提供的表达式匹配来自集合^ -A-Za-z0-9 /.+$中的一个单个字符,其余部分由%消耗,它将匹配LIKE表达式中的任何字符串. (6认同)

Luc*_*ski 15

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

MySQL的

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

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

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


SQL Server

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

请查看本文以获取更多详细信息.