На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Akina
  
> Предикат LIKE в запросе
    Ребят, привет!
    Начинаю вникать в тему SQL - помогите разобраться, пожалуйста.

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

    Я сначала хотел через LIKE сделать, но получается не совсем корректно.

    Например, у меня таблица из трёх значений:

    1. Варяг
    2. Аврора
    3. Победа

    текст запроса: "корабль Аврора был спущен на воду в 1900 году"

    Я пробовал строить запрос, как:

    SELECT *
    FROM ships
    WHERE ships LIKE '% ТЕКСТ ЗАПРОСА %'


    В таком случае - не получается найти совпадения.
    получается - если я буду текст запроса сравнивать через LIKE с таблицей.
    А вот как в обратном порядке сделать - пока не умею :wall:

    пробую на MS SQL.
      Если слово из таблицы, которое надо искать во фразе, не может быть подстрокой слова фразы - то разумнее 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.
        Цитата Akina @

        Спасибо большое!

        Вообще, открыл для себя дивный новый мир sql.
        А раньше казалось, что там всё просто... Стыдоба, короче.
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0189 ]   [ 15 queries used ]   [ Generated: 29.11.22, 09:28 GMT ]