这是我的查询
的输出
但我需要2016年和2017年的所有月份的输出方式
01-2017,02-2017,03-2017,04-2017,05-2017,06-2017,07-2017,08-2017,09-2017,10-2017,11-2017,12-2017 ,01-2016,01-2016,01-2016,02-2016,03-2016,04-2016,05-2016,06-2016,07-2016,08-2016,09-2016,10-2016,11 -2016,12-2016]
我的查询是:
SELECT DISTINCT
to_char(to_date(checked_date, 'dd-mon-yy'), 'mm-yyyy') AS month
FROM DOCTOR_CHECKUP;
下图显示了我的查询输出,但我需要2016年和2017年的所有月份输出均为01-2017,02-2017,03-2017,04-2017,05-2017,06-2017, 07-2017,08-2017,09-2017,10-2017,11-2017,12-2017,01-2016,01-2016,01-2016,02-2016,03-2016,04-2016,05- 2016,06-2016,07-2016,08-2016,09-2016,10-2016,11-2016,12-2016
答案 0 :(得分:1)
此查询生成24个“月”值:
select to_char(add_months(date '2016-01-01', level - 1), 'mm-yyyy') mth
from dual
connect by level <= 24
......这是基本答案。如果您想找到缺失的月份,您可以minus
此查询和您的查询:
select to_char(add_months(date '2016-01-01', level - 1), 'mm-yyyy') mth
from dual connect by level <= 24
minus
select to_char(to_date(checked_date, 'dd-mon-yy'), 'mm-yyyy')
from doctor_checkup
与David Faber answer类似,我添加了add_months
,第二部分回答了这个问题。
看起来checked_date
是varchar类型,你应该避免以这种格式存储日期。
答案 1 :(得分:0)
这很简单。显然,当您只想选择从'01-2016'
到'12-2017'
的月份时,您甚至不需要该表:
select '01-2016' as month from dual
union all
select '02-2016' as month from dual
union all
...
union all
select '12-2017' as month from dual
答案 2 :(得分:0)
使用派生表或固定日期表(更推荐),如下所示:
SELECT DISTINCT NVL(t.month_col,s.month) as month_col
FROM(
SELECT '01-2016' as month_col FROM DUAL
UNION ALL
SELECT '02-2016' as month_col FROM DUAL
UNION ALL
.... // all the dates you want
) t
LEFT JOIN YourTable s
虽然这里似乎没必要,但如果您没有使用表中的任何额外信息,只需使用t
别名的内部查询。
答案 3 :(得分:0)
使用Ponder Stibbons提供的查询
select to_char(add_months(date '2016-01-01', level - 1), 'mm-yyyy') mth
from dual
connect by level <= 24
然后你可以将它加入到你的桌子中,以获得与doctor_checkup相关的任何必要的统计数据。请注意,联接应该在&#34; doctor_checkup&#34;中的checked_date的月份。您可能想要创建基于函数的索引:to_char(checked_date,&#39; mm-yyyy&#39;)
例如,要获得每月的约会数
select mth, nvl(count(1), 0) appointments
from (select to_char(add_months(date '2016-01-01', level - 1), 'mm-yyyy') mth
from dual
connect by level <= 24) mo
left outer join doctor_checkup dc on mo.mth = to_char(dc.checked_date, 'mm-yyyy')