[sql] 두 날짜 사이의 날짜 범위에서 데이터 선택

이름이 지정된 테이블 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.



답변

간격 교차 설명

보시다시피 작업을 수행하는 데는 두 가지 방법이 있습니다.

  • 허용되는 모든 옵션을 입력하십시오
  • 모든 잘못된 옵션 제외

분명히 두 번째 방법은 훨씬 더 간단합니다 (4 개에 대해 2 개의 경우).

SQL은 다음과 같습니다.

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


답변

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종료 날짜보다 큰 경우 그러면이 행이 반환되어야합니다.


답변

범위 사이의 날짜를 얻으려면 다음 쿼리를 시도하십시오.

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


답변

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


답변

여기에는 찾고있는 모든 조건이 포함됩니다.

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


답변

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'
)


답변

시도하십시오 :

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)