SQL Server хранит подстановочные знаки в данных - PullRequest
0 голосов
/ 08 июня 2018

Мне показали таблицу в SQL Server, которая включала % подстановочные знаки в фактические данные таблицы.то есть:

Column1 : Column2 : Column3
1        %         2
3        %         %

Это позволило разработчику выполнить like запросов к этим данным, и базовые данные также будут оцениваться как совпадение вторичного шаблона.

SELECT * FROM tbl WHERE Column1 LIKE '123' не вернет никаких записей.

SELECT * FROM tbl WHERE Column2 LIKE '123' вернет все записи.

SELECT * FROM tbl WHERE Column3 LIKE '2' вернет все записи.

SELECT * FROM tble WHERE Column3 LIKE '123' вернет только последнюю запись.

Я искал повсюду, чтобы выяснить, как это возможно, но я могу найти только кучу информации по like запросам, гдеПодстановочный знак находится в самом запросе, а не в данных.

  1. Как называется этот вуду и где я могу найти документацию?
  2. Поддерживают ли другие базы данных?
  3. Существует ли эта функция в поисковых индексах (SOLR или ElasticSearch) без написания дополнительного кода?

ОБНОВЛЕНИЕ Итак, это было не столько вуду, сколько моя плохая память.Инвертировать like имеет гораздо больше смысла.
SELECT * FROM tble WHERE '123' LIKE Column1

Ответы [ 3 ]

0 голосов
/ 08 июня 2018

Вы перевернули примеры.

Вам нужно использовать

SELECT * FROM tbl WHERE '123' LIKE Column1 

и т. Д.

Для получения желаемых результатов ( demo )

Особого "вуду" нет.LIKE принимает строку с выражением соответствия слева и строку с шаблоном справа и не заботится, взята ли одна или обе строки из столбца или нет.Таким образом, вам нужна только документация для LIKE.

Она будет вести себя так во всех СУБД, которые я представляю.

Но, хотя этот разработчик счел это удобным, все такие запросы приведут к сканированию таблицы, а не к поиску нужных строк потенциально более эффективно с помощью поиска.

0 голосов
/ 08 июня 2018

Если вы измените порядок операндов на LIKE:

SELECT * FROM tbl WHERE '123' LIKE Column2 вернет все записи.

См. это демо

0 голосов
/ 08 июня 2018

Я думаю, что voodoo называется or:

WHERE Column1 LIKE '123' OR Column1 = '%'

OR - довольно распространенная конструкция для разных языков, поэтому я ожидаю, что другие системы, такие как ElasticSearch, будут поддерживать его какну.

Здесь - это повторный тестер, показывающий, что результаты верны.

Как я уже упоминал в комментарии.Я специально выбрал это решение, потому что OP упомянул «сопоставление с образцом», что привело меня к мысли, что фиксированный шаблон может иметь подстановочные знаки.Вопрос немного двусмысленный в этом вопросе, и обратный like может быть тем, что имеет в виду ФП.Я просто не так прочитал вопрос.

...