SQL Server 从表示映射的字符串中提取值



我在SQL Server表中有一列,其SQL是字符串。此列的值实际上是映射,这意味着格式为 (a=1,b=2,c=3)

我需要编写一个 SQL 查询,它将相应的值返回给给定的键。例如,对于键"b",我需要该 SQL 查询返回"2"。

基本上我正在寻找一些具有组匹配的正则表达式支持(即"b=(\w+),")

谢谢

如果不使用 CLR,则无法在 SQL Server 中使用 Regex。如果在您的环境中可能的话,这将是一个不错的选择。

如果没有CLR,你只能使用PATINDEX和SUBSTRING。像这样的东西会起作用,但它一点也不漂亮或高效:

declare @input varchar(50) = '(a=1,b=2,c=3)'
select
substring(@input, patindex('%a=%', @input) + 2, 
             patindex('%,%', substring(@input, patindex('%a=%', @input) + 2, len(@input))) - 1),
substring(@input, patindex('%b=%', @input) + 2, 
             patindex('%,%', substring(@input, patindex('%b=%', @input) + 2, len(@input))) - 1),
substring(@input, patindex('%c=%', @input) + 2, 
             patindex('%)%', substring(@input, patindex('%c=%', @input) + 2, len(@input))) - 1)

基本上,这会查找字符串a=并获取索引。然后,它将该索引加 2(删除 a=)的子字符串子字符串到a=后第一个逗号的索引。

这将如您所期望的那样返回 1 2 3。

最新更新