За последние 24 часа нас посетили 22113 программистов и 990 роботов. Сейчас ищет 781 программист ...

Как сделать выборку из нескольких промежутков времени?

Тема в разделе "PHP и базы данных", создана пользователем Artur_hopf, 22 ноя 2018.

  1. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Добрый день, у меня есть sql запрос который тянет данные с 7 утра до 7 вечера, выглядит он так:
    PHP:
    1. SELECT *
    2. FROM database
    3. WHERE [Date] >=(SELECT DATEADD(hour,7, DATEDIFF(dd, 0, GETDATE())))
    4. AND [Date] <=(SELECT DATEADD(hour,19, DATEDIFF(dd, 0, GETDATE())))        
    5. order by [Date] desc
    Теперь есть необходимость не брать какие то отрезки времени. Например не берем данные с 12 до часу дня.

    Подскажите почему так не работает?:
    PHP:
    1. SELECT *
    2. FROM database
    3. WHERE [Date] >=(SELECT DATEADD(hour,7, DATEDIFF(dd, 0, GETDATE())))
    4. AND [Date] <= '2018-22-11 12:00:00'
    5. AND [Date] >= '2018-22-11 13:00:00'
    6. AND [Date] <=(SELECT DATEADD(hour,19, DATEDIFF(dd, 0, GETDATE())))        
    7. order by [Date] desc
    --- Добавлено ---
    В php это у меня выглядит так вот, нужно будет по условию добавить дополнительные запросы через foreach наверное
    PHP:
    1. $this->db->where("Date >=(SELECT DATEADD(hour,".$a.", DATEDIFF(dd, 0, GETDATE())))");
    2. //   здесь будут дополнительные выборки по времени.
    3. $this->db->where("Date <=(SELECT DATEADD(hour,".$b.", DATEDIFF(dd, 0, GETDATE())))");
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
  3. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @MouseZver Пробовал, не тянет:
    PHP:
    1. SELECT *
    2. FROM database
    3. WHERE [Date] BETWEEN DATEADD(hour,7, DATEDIFF(dd, 0, GETDATE()))
    4. AND '2018-22-11 12:00:00'
    5. AND [Date] BETWEEN '2018-22-11 13:00:00'
    6. AND DATEADD(hour,19, DATEDIFF(dd, 0, GETDATE()))
    7. order by [Date] desc
    Если закомментировать 2ой between то тянет до 12:00, не отличается результат от того что был =(
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    Price NOT BETWEEN 10 AND 20;
     
    Artur_hopf нравится это.
  5. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @Artur_hopf почему не привёл к единому формату даты?
     
    MouseZver нравится это.
  6. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @MouseZver Круто, все получилось, спасибо большое, кланиюся :)
    PHP:
    1. SELECT *
    2. FROM database
    3. WHERE [Date] BETWEEN DATEADD(hour,7, DATEDIFF(dd, 0, GETDATE()))
    4. AND DATEADD(hour,19, DATEDIFF(dd, 0, GETDATE()))
    5. AND [Date] NOT BETWEEN '2018-22-11 12:00:33.820'
    6. AND '2018-22-11 13:39:33.820'  
    7. AND [Date] NOT BETWEEN '2018-22-11 09:00:33.820'
    8. AND '2018-22-11 10:39:33.820'
    9. // и т.д.
    Сам бы я не допер точно.