Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MSSQL正则表达式_Sql_Sql Server_Regex - Fatal编程技术网

MSSQL正则表达式

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 我以为

我有以下正则表达式:^[-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*
免责声明:最初的问题是关于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代码更新您的答案。