MSSQL正则表达式
我有以下正则表达式:^[-A-Za-z0-9/]+$ 当前检查输入文本框的值是否与此匹配。如果不是,则抛出一个错误 我需要检查数据库中是否有与此不匹配的内容 我累了:MSSQL正则表达式,sql,sql-server,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]) 更新 所以经过一点研究,我意识到我不能使用REGEXP 我以为
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*
免责声明:最初的问题是关于MySQL的。下面是SQL Server的答案
MySQL
在MySQL中,正则表达式语法如下:
SELECT * FROM YourTable WHERE (`url` NOT REGEXP '^[-A-Za-z0-9/.]+$')
使用REGEXP
子句,而不是像那样使用。后者用于使用%
和通配符进行模式匹配
SQL Server
由于您输入了一个错误,并且您使用的是SQL Server(不是MySQL),因此必须创建一个用户定义的CLR函数来公开正则表达式功能
查看更多详细信息。如上所述,问题最初是关于MySQL的
使用REGEXP
,而不是像那样使用:
SELECT * FROM `table` WHERE ([url] NOT REGEXP '^[-A-Za-z0-9/.]+$')
谢谢大家的帮助
这就是我最后使用的:
SELECT *,
CASE WHEN [url] NOT LIKE '%[^-A-Za-z0-9/.+$]%'
THEN 'Valid'
ELSE 'No valid'
END [Validate]
FROM
*table*
ORDER BY [Validate]
我收到了“在预期条件的上下文中指定的非布尔型表达式”的评论,我需要引用其他内容吗?嗯,我认为这可能与系统发育有关。。。不要使用[…]
转义列名,这是t-SQL语法。如果可能的话,可以删除它们,或者使用backticks(`),我已经修改了它,修改为上面的代码。我现在收到:“REGEX”附近的语法不正确。期望介于两者之间。我在谷歌上搜索过这个,它似乎是一个类型转换错误?我开始怀疑我是否可以在SQL Management Studio中实际使用REGEXP2012@Clare啊哈!是的,那是完全不同的事情!在MSSQL中,您需要使用正则表达式。您使用的是MSSQL还是MySQL?它们是两种不同的、相互竞争的RDBMS产品,来自不同的供应商,并且具有不同的语法。我非常确定答案并没有达到预期效果,因为MS-SQL只支持非常有限的类RegExp运算符子集:,因此在[]中提供了表达式匹配集合^-A-Za-z0-9/+$中的一个字符,其余字符由%使用,这将匹配LIKE表达式中的任何字符串。@Mr.Napik-这一想法是合理的,尽管它取决于排序规则,不管它是否实际按书面形式工作<代码>^
用作否定。因此,它不是说“检查每个字符是否与模式匹配”,而是检查没有与模式不匹配的字符。不过,它可能需要一个二进制collate子句才能真正按预期工作。e、 g.请参见SELECT char(number)FROM master..spt_values,其中type='P'和介于1和255之间的数字以及char(number)与“[^-A-Za-z0-9/+$]”不同的是,将拉丁语1_-General_-Bin
与之进行对比。SQL Server上的方位角正则表达式信息可在此处找到@Matt您提供的链接涉及到编辑查询,而不是SQL Server的有效语法。更重要的是,即使在SQL Server 2017中运行类似的查询,也会在“REGEXP”附近返回在预期条件的上下文中指定的非布尔类型的表达式。
错误-我假设还没有这样的关键字。是的,正如@bhauy指出的,没有像REGEXP
这样的关键字。因此,请使用正确的SQL代码更新您的答案。