Sql server Sql喜欢正则表达式

Sql server Sql喜欢正则表达式,sql-server,regex,function,stored-procedures,sql-like,Sql Server,Regex,Function,Stored Procedures,Sql Like,有没有一种好方法可以将正则表达式转换为函数内部的LIKE(MSSQL)? 存储过程不会变得比这更复杂: (country\=)(?<Country>[\w\d]+)(\&sessionid\=)(?<SessionId>.+) 如果正则表达式是[表]的一部分,请检查sql的此函数。它可以帮助您完成任务:PATINDEX(“%[^0-9\.]%”,@Input) 不是现成的。在SQL Server中,最接近正则表达式搜索的是PATINDEX(),但这不适用于正则表

有没有一种好方法可以将正则表达式转换为函数内部的LIKE(MSSQL)? 存储过程不会变得比这更复杂:

(country\=)(?<Country>[\w\d]+)(\&sessionid\=)(?<SessionId>.+)

如果正则表达式是[表]的一部分,请检查sql的此函数。它可以帮助您完成任务:
PATINDEX(“%[^0-9\.]%”,@Input)


不是现成的。在SQL Server中,最接近正则表达式搜索的是PATINDEX(),但这不适用于正则表达式


如果您真的想要这样做,那么您必须创建一个CLR函数来运行正则表达式。您可能会担心速度,但我要说的是,几乎所有涉及正则表达式或模式的操作都无法使用索引。

可以使用CLR函数将正则表达式解析添加到SQL server。这在SQL 2005及更高版本中是可能的。请参阅,以获得一个很好的示例。

它在一个大表上运行非常慢,解析每一行上的字符串列

如果您可以更改该表,那么最好将该字符串列拆分为不同的列,这样您就可以使用更传统的
WHERE country=。。。sessionid=…
,您甚至可以通过这种方式添加和使用索引。

我可以想象

SELECT ...
FROM [Table]
WHERE col LIKE 'country=[A-Za-z0-9]%&sessionid=[A-Za-z0-9]%'
可能足够近了?如果目的只是带回具有非空白国家/地区和会话ID值的记录


如果列中的值不一定以“country”开头,则必须使用
其中的列“%country=[A-Za-z0-9]%和sessionid=[A-Za-z0-9]”
,根据KM的回答,这可能会大大降低速度。

使用免费的正则表达式功能。这种方法没有任何性能问题。

您想实现什么?某种基于表的分派机制,其中规则表示为正则表达式。。。我只是好奇我是否猜对了。我会假设我在解析日志文件。有没有办法告诉函数一个表达式的多个实例,比如regex:s“+”或“*”。例如,PATINDEX(“%[a-c]+%”,@Input)最终从他们那里得到了答案,应该可以正常工作。。谢谢尽管你的回答不能完全回答我的问题,但它解决了我的问题。。因此,我将其标记为已解决:)虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,则仅链接的答案可能无效
SELECT ...
FROM [Table]
WHERE col LIKE 'country=[A-Za-z0-9]%&sessionid=[A-Za-z0-9]%'