在写SQL的时候有时候我们要界面上边显示当前查询日期之间的所有月份数据,但是数据库里边不是每个月都有数据,这样查询的时候做关联,就会出现有的月份才会显示,没有的月份不会显示,但是我们有时候想不管数据库有没有数据我们都要把这个日期期间所有的月都要展示出来,我们就要先伪造一个日期期间的月份然后再做左连接这样就乐意把所有的月份都显示出来。
SQL如下:
WITH PARAMS AS(
SELECT '2014-01-01' BG,'2014-12-31' ED FROM DUAL)
SELECT TO_CHAR(ADD_MONTHS(TO_DATE(PM.BG,'YYYY-MM-DD'),ROWNUM-1),'YYYYMM') YEAR_MONTH
FROM DUAL INNER JOIN PARAMS PM ON 1=1
CONNECT BY ROWNUM<=(SELECT MONTHS_BETWEEN(TO_DATE(PA.ED,'YYYY-MM-DD'),TO_DATE(PA.BG,'YYYY-MM-DD'))+1
FROM DUAL INNER JOIN PARAMS PA ON 1=1)
截图如下: