匹配字符是否存在于类似语句中

时间:2017-11-16 21:42:25

标签: sql sql-server sql-like

我需要一个匹配角色的表达式,无论它是否存在。它需要匹配以下值:

  • ..."value": "123456"...
  • ..."value": "123456"...
  • "...value":"123456"...

这个相似的陈述几乎可以奏效:LIKE '%value":%"123456"%'

但是有一些像这样的值也会匹配,但我不想要返回:

  • ..."value":"99999", "other":"123456"...

执行我要做的事情的正则表达式是'value": *?"123456"'。我需要在SQL Server 2008中执行此操作,并且我不相信该版本中有正确的正则表达式支持。如何使用类似的声明进行匹配?

2 个答案:

答案 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 + '"'的索引,找到引用的下一个索引,然后找到一个索引,然后获取这两个引号之间的字符串并返回它。