За последние 24 часа нас посетили 22020 программистов и 988 роботов. Сейчас ищут 708 программистов ...

Как правильно составить pattern для SQL LIKE

Тема в разделе "MySQL", создана пользователем desertFox, 10 сен 2019.

  1. desertFox

    desertFox Активный пользователь

    С нами с:
    19 окт 2013
    Сообщения:
    62
    Симпатии:
    0
    Здравствуйте. Допустим, в некой таблице есть столбец stolb. Значения сохраняются в виде одного или нескольких наборов цифр (5-6 символов), которые разделены друг от друга переносом строки. Например, имеется три записи со следующими значениями:
    1. 112019 52019
    2. 82019 12019 62019
    3. 12019
    Какой правильно составить запрос, чтобы получить строки под номерами №2 и №3 в которых есть 12019? С помощью оператора LIKE я сделал так: ...WHERE stolb LIKE '%12019%' . Но в результат также попала запись №1.
     
  2. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    stolb да когда-ж вы начнёте писать имена нормально = "12019" or stolb like '% 12019 %'
     
    yanuzay нравится это.
  3. yanuzay

    yanuzay Активный пользователь

    С нами с:
    28 мар 2018
    Сообщения:
    498
    Симпатии:
    57
    хорошо хоть не на русском языке названия полей
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Изначально понятно что здесь "архитектурная" ошибка. Эти числа надо было разместить в отдельных записях.

    Но если всё-таки попытаться выловить рыбку из этой говнины мешанины, то like не подходит: с
    * С пробелами в паттерне он отклонит вариант когда число стоит первым или последним,
    * без пробелов он может по ошибке признать число с бОльшим кол-вом разрядов, включающим искомую подстроку.

    Есть функция find_in_set() которая бы справилась, если бы список был с разделителем "," а не " ".

    Но лучше таки использовать отдельные записи. Учите "нормальные формы"!
     
    Valick нравится это.
  5. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    если нет возможности изменить архитектуру.. измените тип записи в столбец... что бы числа были записаны через запятую и потом для их поиска использовать FIND_IN_SET... хотя конечно лучше или отдельные столбцы, или если мы не знаем сколько чисел будет - то сделать еще одну табличку (one to many)
     
  6. desertFox

    desertFox Активный пользователь

    С нами с:
    19 окт 2013
    Сообщения:
    62
    Симпатии:
    0
    Благодарю всех отозвавшихся за помощь, решил свою задачу следующим образом:
    ...WHERE stolb LIKE '%12019%' AND stolb NOT LIKE '%112019%'
    вроде сработало как надо :)
     
  7. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @desertFox, вы только что стали на табуреточку и накинули петлю на шею.
    Теперь время играет против вас.