我需要一个匹配角色的表达式,无论它是否存在。它需要匹配以下值:
..."value": "123456"...
..."value": "123456"...
"...value":"123456"...
这个相似的陈述几乎可以奏效:LIKE '%value":%"123456"%'
但是有一些像这样的值也会匹配,但我不想要返回:
..."value":"99999", "other":"123456"...
执行我要做的事情的正则表达式是'value": *?"123456"'
。我需要在SQL Server 2008中执行此操作,并且我不相信该版本中有正确的正则表达式支持。如何使用类似的声明进行匹配?
答案 0 :(得分:2)
删除与REPLACE()
比较的空格:
WHERE REPLACE(column,' ','') LIKE '%"value":"123456"%'
可能需要对标签进行双重替换:
REPLACE(REPLACE(column,' ',''),' ','')
答案 1 :(得分:0)
我认为你不能the like operator。您可以排除可以匹配的内容,例如,如果您要确保它不包含other
:
[field] LIKE '%value":%"123456"%` AND [field] NOT LIKE '%"other"%'
否则我认为你必须对字符串进行一些处理。你可以编写一个UDF来获取字符串并解析它以找到'value'的值并根据它进行比较:
dbo.fn_GetValue([field], 'value') = '123456'
该函数可以找到'"' + @name + '"'
的索引,找到引用的下一个索引,然后找到一个索引,然后获取这两个引号之间的字符串并返回它。