我有以下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*
答案 0 :(得分:15)
免责声明:最初的问题是关于MySQL。 SQL Server答案如下。
在MySQL中,正则表达式语法如下:
SELECT * FROM YourTable WHERE (`url` NOT REGEXP '^[-A-Za-z0-9/.]+$')
使用REGEXP
子句代替LIKE
。后者用于使用%
和_
通配符进行模式匹配。
由于您输了一个拼写错误,并且您正在使用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/.]+$')