2013-10-23 2 views
4

달이 한 달 전체에서 모든 날짜를 표시하려면 어떻게해야합니까 (예 : 1 ~ 3 사이의 달). 그러면이 쿼리는 1 월의 첫 번째 날짜부터 3 월 마지막 날짜. 어쩌면 아래처럼 미리보기를 할 수 있습니다. MySQL은 한 달 전체에서 모든 날짜를 표시합니다.

2013-01-01 
2013-01-02 
2013-01-03 
.. 
.. 
2013-02-28 
.. 
2013-03-31 

는 특정 연도를 위해 필요한 경우

답변

1

는 당신이 필요로하는 경우에 것을 추가해야? 이것에 대한 당신의 도움에 대한 감사 어떤 생각을 가지고 두 날짜 사이에 모든 날짜의 목록을 생성 당신은 탈리 (숫자)의 도움으로 그 일을 할 수 있습니다. 테이블 당신은 쉽게 당신이 할 수있는 1 월 1 월과 3 월의 마지막 날 사이의 모든 날짜의 목록을 작성하는 지금이

CREATE TABLE tally (n int not null primary key); 

INSERT INTO tally 
SELECT a.N + b.N * 10 + c.N * 100 + 1 n 
    FROM 
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a 
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b 
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) c 
ORDER BY n; 

등을 만들 수 있습니다이 여기

SELECT '2013-01-01' + INTERVAL t.n - 1 DAY day 
    FROM tally t 
WHERE t.n <= DATEDIFF(LAST_DAY('2013-03-01'), '2013-01-01') + 1 

SQLFiddle 데모입니다

+0

여전히 테이블을 만드시겠습니까? 만약 내가 테이블을 만들 필요가없는 어딘가에 파생 테이블이나 뭔가 임시 데이터가 아니라 DB에 물리학 어떤 해결책이 있습니까? – empugandring

+0

감사합니다 @peterm, 나는 정말로 그것을 apreciate지만 여전히 내 문제를 해결할 수 없다, 어쩌면 거기에 테이블을 만들 필요가 어떤 식 으로든 없습니다. 감사합니다 – empugandring

+0

@empugandring에 동의합니다. 나는 테이블을 만들 필요가 없다고 생각합니다. 그냥 적당하지 않은 것 같아. – Muhaimin

0
select * from your_table 
where month(`date`) between 1 and 3 

그리고 당신이

select * from your_table 
where year(`date`) = 2013 
and month(`date`) between 1 and 3 
+0

나는이 쿼리를 파생 테이블과 같은 다른 테이블 (예 : 파생 테이블)과 결합하여 한 달 동안 모든 날짜를 표시하기 때문에이 함수가 있습니다. 직원 테이블 파생 테이블/쿼리 other_query | | | VVV + ---------------- + ----------------- + ---------- + | employee_id | 날짜 | 상태 | + ---------------- + ----------------- + ---------- + | 1001 | 2013-01-01 | A | + ---------------- + ----------------- + ---------- + – empugandring

0
SELECT Field1, Field2 FROM table WHERE dateField between '2013-01-01' and '2013-03-31' 
3

필요한 날짜 수보다 많은 수의 항목이있는 표가있는 경우 다음을 사용할 수 있습니다.

SELECT adddate('2013-01-01', @rownum := @rownum + 1) dt FROM my_table 
JOIN (SELECT @rownum := -1) r 
LIMIT 31; 

작은 테이블을 my_table으로 선택하십시오. my_table에 항목이 너무 많으면 limit를 사용하면 더 빨리 처리 할 수 ​​있습니다.

이 기초는 자체 증가하는 rownum과 같은 카운터를 사용하고 있습니다.

SELECT * FROM 
    (SELECT adddate('2013-01-01', @rownum := @rownum + 1) dt FROM my_table 
    JOIN (SELECT @rownum := -1) r LIMIT 1000) temp 
WHERE MONTH(dt) = 1 AND YEAR(dt) = 2015; 
관련 문제