Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.207.133.13] |
|
Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Сообщ.
#1
,
|
|
|
Ребят, привет!
Начинаю вникать в тему SQL - помогите разобраться, пожалуйста. Есть таблица из 1 колонки со строковыми значениями, каждое из которых содержит одно слово. Мне надо запросом передать строку, состоящую из нескольких слов, и выдернуть те ячейки таблицы, которые дадут совпадение. Я сначала хотел через LIKE сделать, но получается не совсем корректно. Например, у меня таблица из трёх значений: 1. Варяг 2. Аврора 3. Победа текст запроса: "корабль Аврора был спущен на воду в 1900 году" Я пробовал строить запрос, как: SELECT * FROM ships WHERE ships LIKE '% ТЕКСТ ЗАПРОСА %' В таком случае - не получается найти совпадения. получается - если я буду текст запроса сравнивать через LIKE с таблицей. А вот как в обратном порядке сделать - пока не умею пробую на MS SQL. |
Сообщ.
#2
,
|
|
|
Если слово из таблицы, которое надо искать во фразе, не может быть подстрокой слова фразы - то разумнее WHERE CHARINDEX(table.word, phrase) > 0.
Если же такой ситуации следует избегать, то WHERE CHARINDEX(CONCAT(' ', table.word, ' '), CONCAT(CONCAT(' ', phrase, ' ')) > 0. Либо WHERE CONCAT(' ', phrase, ' ') LIKE CONCAT('% ', table.word, ' %'). Либо использовать регулярки - но встроенных функций в SQL Server нет. Преднамеренно не использую плюс для конкатенации строк. Причины придумайте сами. В любом случае при сравнении следует убедиться в совпадении CHARSET (если не совпадают - выполнить соотв. конвертацию) и использовании правильного COLLATION. |
Сообщ.
#3
,
|
|
|
Цитата Akina @ Спасибо большое! Вообще, открыл для себя дивный новый мир sql. А раньше казалось, что там всё просто... Стыдоба, короче. |