За последние 24 часа нас посетили 17594 программиста и 1912 роботов. Сейчас ищут 974 программиста ...

Выбрать все кроме "9999[9]+".

Тема в разделе "PHP и базы данных", создана пользователем Volt(220), 3 июн 2011.

  1. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Дано:
    id тестовой записи состоит только из девяток и их не менее пяти.

    Задача:
    Взять из таблицы все записи кроме тестовых.

    Пример:
    В таблице:
    Код (Text):
    1. id       mydata
    2. 1        Нечто
    3. 2        Что-то
    4. 9        Тоже что-то есть
    5. 23       Хлам
    6. 99       Некто
    7. 257      А чо
    8. 99999    Тест
    9. 100000   Нужные данные
    10. 999999   Тоже тест
    Запрос должен вернуть:
    Код (Text):
    1. id       mydata
    2. 1        Нечто
    3. 2        Что-то
    4. 9        Тоже что-то есть
    5. 23       Хлам
    6. 99       Некто
    7. 257      А чо
    8. 100000   Нужные данные
    Ограничение:
    Используется MS SQL Server.
    Хотя можно решить для чего другого и попробовать перевести.

    Вопрос:
    Как выглядит запрос возвращающий нужные данные?

    Решения:
    MySQL скорее всего может это сделать через REGEX:
    [sql]where id NOT REGEXP 99999+[/sql]
    Но, MSSQL умеет регулярки только через левое ухо.

    [sql]where len(replace(cast(id as nvarchar(20)), '9', ''))=0 and len(cast(id as nvarchar(20)))>=5 [/sql]
    Как-то очень монструозно...
     
  2. engager

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

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    может быть по-уродски, но как вариант
    [sql]select
    *
    from
    mytable
    where
    1=1
    and cast (id as varchar) not like '%0%'
    and cast (id as varchar) not like '%1%'
    ...
    and cast (id as varchar) not like '%8%'
    and id >=99999[/sql]

    этот селект вернет все тестовые записи. следовательно, нужно применить как-то отрицание (напр, not in), и вуаля.