Выборка по первым символам

Тема в разделе "Базы данных", создана пользователем upfr7, 25 апр 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. upfr7

    upfr7 Создатель

    Регистр.:
    13 апр 2008
    Сообщения:
    26
    Симпатии:
    0
    С буквами все понятно, а вот как выбрать одним запросом, чтобы были все записи где первые идут цифры(0-9)

    Код:
    SELECT * FROM artist WHERE a_name LIKE'[0-9]%' 
    не помогает...
     
  2. mentanos

    mentanos Постоялец

    Регистр.:
    27 дек 2007
    Сообщения:
    128
    Симпатии:
    35
    SELECT * FROM artist WHERE a_name regexp "^\d+"

    если нужно только чтоб ОДНА цифра была вначале - "^\d"
     
    gentoouser и upfr7 нравится это.
  3. JIEXA

    JIEXA Прохожие

    С регулярками это конечно же выход, но медленный, если нужна скорость, то лучше сделать так:

    SELECT *
    FROM artist
    WHERE (
    a_name LIKE '1%'
    OR a_name LIKE '2%'
    OR a_name LIKE '3%'
    OR a_name LIKE '4%'
    OR a_name LIKE '5%'
    OR a_name LIKE '6%'
    OR a_name LIKE '7%'
    OR a_name LIKE '8%'
    OR a_name LIKE '9%'
    OR a_name LIKE '0%'
    )
     
  4. DarkL

    DarkL Писатель

    Регистр.:
    18 сен 2007
    Сообщения:
    3
    Симпатии:
    0
    Когда-то тоже мучался, потом тоже пришел к такому варианту как в последнем посте :)
     
  5. xsliderx

    xsliderx Создатель

    Регистр.:
    9 авг 2007
    Сообщения:
    16
    Симпатии:
    2
    Последний запрос эффективен при наличии индекса по a_name, иначе на фулскане таблицы по сравнению с regexpом не сильно выиграет.
     
  6. pavel012007

    pavel012007

    Регистр.:
    12 мар 2008
    Сообщения:
    210
    Симпатии:
    117
    Предлагаю такой вариант.

    Таблица ttt: id INT name VARCHAR(20).
    Добавляем константу 0 вначало name. Если вначале name нет цифр, результат 0. Иначе первые цифры name преобразуются в число и складываются с нулём.
    Выводим значения суммы больше нуля. Можно так же отсортировать их по возрастанию.


    Код:
    SELECT *
    FROM `ttt` 
    WHERE 
      0 + name  > 0
    ORDER BY
      0 + name 
    
     
Статус темы:
Закрыта.