【发布时间】:2020-05-09 12:17:02
【问题描述】:
我正在将使用正则表达式的 CLR 函数转换为 SQL 函数。我知道 SQL Server 不完全支持正则表达式,但我只需要一个案例即可工作,即单词搜索。
搜索字段值:{"Id":1234, "Title": "The quick brown"}
.NET 中的正则表达式模式:'\b' + '"Id":1234' '\b'
当搜索字段包含 "Id":1234 但不包含 "Id":12345
时,我希望能够匹配我如何实现这一目标?我已经尝试过了,但是当数字 1234 以空格或 b 而不是逗号结尾时显然不起作用。
DECLARE @match bit = 0
DECLARE @input nvarchar(max) = '{"Id":1234, "Title": "The quick brown"}'
DECLARE @pattern nvarchar(max) ='"Id":1234'
SELECT @match = 1 FROM (VALUES ('')) table1 (column1)
WHERE @Input LIKE '%' + @pattern + ',%'
【问题讨论】:
-
T-SQL 不支持正则表达式;时期。它支持 basic 模式匹配,仅此而已。如果你需要在 SQL Server 中使用某种 REGEX 功能,你需要使用 CLR 函数(有很多关于 REGEX 的示例)。
-
@Larnu 我在我的问题中特别说过 SQL Server 不支持正则表达式,但我不需要完整的正则表达式支持。我也说我在转换CLR函数,那你告诉我用CLR函数?
-
这并没有改变我的观点。 SQL Server 只支持基本的模式匹配,如果你想要更多,那么你需要 REGEX,或者类似的东西;这需要一个CLR。我重申这个事实,就好像你知道你不会问如何使用 T-SQL 的基本模式匹配来复制 REGEX 功能。
-
@Larnu 正是我的意思,我只需要基本的模式匹配。我们创建 CLR 是因为我们知道它将涵盖广泛的模式匹配,但是现在我们正在迁移到 Azure SQL w/c 不支持 CLR,我们必须转换 CLR,因此出现了问题。当然,我不期望完整的 REGEX 功能,因此具体情况。
标签: c# sql sql-server tsql