Выберите данные из диапазона дат между двумя датами - программирование
Подтвердить что ты не робот

Выберите данные из диапазона дат между двумя датами

У меня есть таблица Named Product_Sales и она содержит данные вроде этого

Product_ID | Sold_by | Qty | From_date  | To_date
-----------+---------+-----+------------+-----------
3          | 12      | 7   | 2013-01-05 | 2013-01-07
6          | 22      | 14  | 2013-01-06 | 2013-01-10
8          | 11      | 9   | 2013-02-05 | 2013-02-11

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

Например, я хочу выбрать данные продаж от 2013-01-03 до 2013-01-09.

4b9b3361

Ответ 1

interval intersection description

Как вы можете видеть, есть два способа добиться успеха:

  • заручиться всеми приемлемыми параметрами
  • исключить все неправильные параметры

Очевидно, что второй способ намного проще (только два случая против четырех).

Ваш SQL будет выглядеть так:

SELECT * FROM Product_sales 
WHERE NOT (From_date > @RangeTill OR To_date < @RangeFrom)

Ответ 2

SELECT * from Product_sales where
(From_date BETWEEN '2013-01-03'AND '2013-01-09') OR 
(To_date BETWEEN '2013-01-03' AND '2013-01-09') OR 
(From_date <= '2013-01-03' AND To_date >= '2013-01-09')

Вы должны охватить все возможности. From_Date или To_Date могут находиться между диапазоном дат или датами записи могут охватывать весь диапазон.

Если один из From_date или To_date находится между датами, или From_date меньше даты начала, а To_date больше, чем дата окончания; то эта строка должна быть возвращена.

Ответ 3

Попробуйте выполнить запрос для получения дат между диапазоном:

SELECT  *
FROM    Product_sales 
WHERE   From_date >= '2013-01-03' AND
        To_date   <= '2013-01-09'

Ответ 4

SELECT * FROM Product_sales 
WHERE From_date between '2013-01-03'
AND '2013-01-09'

Ответ 5

SELECT *
FROM Product_sales
WHERE (
From_date >= '2013-08-19'
AND To_date <= '2013-08-23'
)
OR (
To_date >= '2013-08-19'
AND From_date <= '2013-08-23'
)

Ответ 6

Попробуйте:

DECLARE @FrmDt DATETIME, @ToDt DATETIME
SELECT @FrmDt='2013-01-03', @ToDt='2013-01-09'

SELECT * 
FROM Product_sales 
WHERE (@FrmDt BETWEEN From_date AND To_date) OR 
    (@ToDt BETWEEN From_date AND To_date)

Ответ 7

select * 
from table 
where
( (table.EndDate > '2013-01-05') and (table.StartDate < '2013-01-07' )  )

Ответ 8

Только мои 2 цента, я считаю, что формат "dd-MMM-yyyy" наиболее безопасен, поскольку сервер db будет знать, чего вы хотите, независимо от региональных настроек на сервере. В противном случае вы могли бы столкнуться с проблемами на сервере с региональными настройками даты как yyyy-dd-mm (по какой бы то ни было причине)

Таким образом:

SELECT * FROM Product_sales 
WHERE From_date >= '03-Jan-2013'
AND To_date <= '09-Jan-2013'

Это всегда сработало для меня: -)

Ответ 9

Эта работа над SQL_Server_2008 R2

Select * 
from Product_sales
where From_date 
between '2013-01-03' and '2013-01-09'

Ответ 10

Этот запрос поможет вам:

select * 
from XXXX
where datepart(YYYY,create_date)>=2013 
and DATEPART(YYYY,create_date)<=2014

Ответ 11

SELECT NULL  
    FROM   HRMTable hm(NOLOCK)  
    WHERE  hm.EmployeeID = 123
        AND (  
                (  
                    CAST(@Fromdate AS date) BETWEEN CAST(hm.FromDate AS date)  
                        AND CAST(hm.ToDate AS date)  
                )  
                OR (  
                    CAST(@Todate AS date) BETWEEN CAST(hm.FromDate AS date)  
                        AND CAST(hm.ToDate AS date)  
                   )  
                ) 
         )

Ответ 12

Отметьте этот запрос, я создал этот запрос, чтобы проверить, проверяется ли дата проверки на коленях с датами бронирования

SELECT * FROM tbl_ReservedRooms
WHERE NOT ('@checkindate' NOT BETWEEN fromdate AND todate
  AND '@checkoutdate'  NOT BETWEEN fromdate AND todate)

это приведет к повторению деталей, которые накладываются друг на друга, чтобы получить не перекрывающиеся детали, а затем удалить "NOT" из запроса

Ответ 13

Вы также можете попробовать использовать следующие фрагменты:

select  * from  Product_sales 
where  From_date  >= '2013-01-03' and game_date  <= '2013-01-09'

Ответ 14

Это просто, используйте этот запрос, чтобы найти выбранные данные из диапазона дат между двумя датами

select * from tabblename WHERE (datecolumn BETWEEN '2018-04-01' AND '2018-04-5')

Ответ 15

Вы должны сравнивать даты в sql так же, как сравнивать числовые значения,

SELECT * FROM Product_sales
WHERE From_date >= '2013-01-01' AND To_date <= '2013-01-20'

Ответ 16

Вот запрос, чтобы найти все продажи продукта, которые были запущены в течение августа.

  • Найти Product_sales были активны в течение августа.
  • Включить все, что началось до конца августа
  • Исключить все, что закончилось до 1 августа.

Также добавляет оператор case для проверки запроса

SELECT start_date, 
       end_date, 
       CASE 
         WHEN start_date <= '2015-08-31' THEN 'true' 
         ELSE 'false' 
       END AS started_before_end_of_month, 
       CASE 
         WHEN NOT end_date <= '2015-08-01' THEN 'true' 
         ELSE 'false' 
       END AS did_not_end_before_begining_of_month 
FROM   product_sales 
WHERE  start_date <= '2015-08-31' 
       AND end_date >= '2015-08-01' 
ORDER  BY start_date; 

Ответ 17

Этот код будет работать хорошо:

Контроллер:

$this->load->model("YourModelName");
$data ['query'] = $this->YourModelName->get_report();

Модель:

  public function get_report()
     {   
       $query = $this->db->query("SELECT  *
FROM   reservation WHERE arvdate <= '2016-7-20' AND  dptrdate >= '2016-10-25' ");
       return $query;
     }

где "arvdate" и "dptrdate" - две даты в базе данных, а "резервирование" - это имя таблицы.

Вид:

<?php
 echo $query->num_rows();
?>

Этот код должен возвращать количество строк. Чтобы вернуть данные таблицы, используйте

$query->rows();
return $row->table_column_name;

Ответ 18

DECLARE @monthfrom int=null,
@yearfrom int=null,
@monthto int=null,
@yearto int=null,
@firstdate DATE=null,
@lastdate DATE=null

SELECT @firstdate=DATEADD(month,@monthfrom-1,DATEADD(year,@yearfrom-1900,0)) /*Setting First Date using From Month & Year*/
SELECT @lastdate= DATEADD(day,-1,DATEADD(month,@monthto,DATEADD(year,@yearto-1900,0)))/*Setting Last Date using From Month & Year*/

SELECT *  FROM tbl_Record
WHERE  (DATEADD(yy, Year - 1900, DATEADD(m, Month - 1, 1 - 1)) BETWEEN CONVERT(DATETIME, @firstdate, 102) AND 
CONVERT(DATETIME, @lastdate, 102))

Ответ 19

Это охватывает все условия, которые вы ищете.

SELECT * from Product_sales where (From_date <= '2013-01-09' AND To_date >= '2013-01-01')

Ответ 20

это легко, используйте этот запрос, чтобы найти то, что вы хотите.

select * from Product_Sales where From_date<='2018-04-11' and To_date>='2018-04-11'