Соответствует символу, независимо от того, существует он в заявлении "Нравится"

Мне нужно подобное выражение, которое будет соответствовать символу, независимо от того, существует он или нет. Он должен соответствовать следующим значениям:

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

Это как заявление будет почти работать: LIKE '%value":%"123456"%'

Но есть такие значения, которые также будут соответствовать, но я не хочу возвращать:

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

Выражение регулярного выражения, чтобы сделать то, что я хочу сделать, это 'value": *?"123456"', Мне нужно сделать это в SQL Server 2008, и я не верю, что в этой версии есть хорошая поддержка регулярных выражений. Как я могу сопоставить, используя подобное утверждение?

2 ответа

Удалить пробелы в вашем сравнении с REPLACE():

WHERE REPLACE(column,' ','') LIKE '%"value":"123456"%'

Может потребоваться двойная замена вкладок:

REPLACE(REPLACE(column,' ',''),'    ','')

Я не думаю, что вы можете с таким оператором. Вы можете исключить те, с которыми вы могли бы соответствовать, например, если вы хотите убедиться, что он просто не содержит other:

[field] LIKE '%value":%"123456"%` AND [field] NOT LIKE '%"other"%'

В противном случае я думаю, что вам придется выполнить некоторую обработку строки. Вы можете написать UDF, чтобы взять строку и проанализировать ее, чтобы найти значение для 'value' и сравнить на основе этого:

dbo.fn_GetValue([field], 'value') = '123456'

Функция может найти индекс '"' + @name + '"'найдите следующий индекс кавычки и один после этого, затем получите строку между этими двумя кавычками и верните ее.

Другие вопросы по тегам