source

mysql 선택 쿼리에서 두 날짜 사이의 날짜 목록을 가져오는 방법

bestscript 2022. 11. 13. 19:37

mysql 선택 쿼리에서 두 날짜 사이의 날짜 목록을 가져오는 방법

선택 쿼리에 따라 두 날짜 사이에 날짜 목록을 원합니다.예를 들어 다음과 같습니다.

'2012-02-10'과 '2012-02-15'를 지정하면 결과가 필요합니다.

date      
----------
2012-02-10
2012-02-11
2012-02-12
2012-02-13
2012-02-14
2012-02-15 

어떻게 가지?

시험:

select * from 
(select adddate('1970-01-01',t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) selected_date from
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
 (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v
where selected_date between '2012-02-10' and '2012-02-15'

-최장 300년 후까지.

[UrvishAtSynapse의 권장 편집에 따라 수정되었습니다]

set @i = -1;
SELECT DATE(ADDDATE('2012-02-10', INTERVAL @i:=@i+1 DAY)) AS date FROM `table`
HAVING 
@i < DATEDIFF('2012-02-15', '2012-02-10') 

그러면 지정된 대로 결과 세트가 정확히 반환됩니다.이 쿼리에서는 dateiff와 addate의 두 가지 다른 날짜만 변경하면 됩니다.

MySQL 5.5에서는 승인된 답변이 작동하지 않았습니다.쿼리를 업데이트했습니다.

select * from 
(select adddate('1970-01-01',t4*10000 + t3*1000 + t2*100 + t1*10 + t0) selected_date from
 (select 0 t0 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
 (select 0 t1 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
 (select 0 t2 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
 (select 0 t3 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
 (select 0 t4 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v
where selected_date between '2012-02-10' and '2012-02-15'

이 게시물을 보세요: 두 날짜 사이의 날짜 목록을 가져옵니다.

Ron Savage가 실행한 저장 프로시저를 확인해 보세요.이것은 당신이 필요로 하는 것에 해당하는 것 같습니다!

사용할 필요가 있는 모든 날짜를 포함하는 테이블을 만들 수 있습니다.

date
2000-01-01
2000-01-02
2000-01-03
...etc..
2100-12-30
2100-12-31

그런 다음 다음과 같이 테이블을 쿼리합니다.

SELECT date
FROM dates
WHERE date BETWEEN '2012-02-10' AND '2012-02-15'
SELECT * FROM tablexxx WHERE datecol BETWEEN '2012-02-10' AND '2012-02-15';

언급URL : https://stackoverflow.com/questions/9295616/how-to-get-list-of-dates-between-two-dates-in-mysql-select-query