获取月(两位):select to_char(sysdate,'mm') from dual
创新互联长期为近千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为西湖企业提供专业的成都做网站、成都网站设计,西湖网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。
那你就把指定的日期to_date()成date,如下:
select to_char(to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss'),'mm') from dual
1、查询确定年月的数据,使用to_date或to_char都可以实现
SELECT * FROM 表名
WHERE TO_CHAR(日期列,'YYYY-MM') = TO_CHAR('2013-06','YYYY-MM') 或者
SELECT * FROM 表名
WHERE 日期列 = TO_Date('2013-06','YYYY-MM')
2、查询前一个月
select concat(to_char(sysdate,'yyyy')||to_char(add_months(sysdate,-1), '-MM-'),'01 00:00:00')start_time,
concat(to_char(sysdate,'yyyy')||to_char(add_months(sysdate,-1), '-MM-')||to_char(LAST_DAY(sysdate),'dd '),'23:59:59') end_time from dual
3、查询前一天
select to_char(sysdate-1,'yyyy-mm-dd ')||'00:00:00' start_time,to_char(sysdate-1,'yyyy-mm-dd ')||'23:59:59' end_time from dual
--1、考虑到没有数据的也要总结出一条0的记录,那我们需要先生成一张当月的日期中间表
SELECT FDATE
FROM (SELECT TRUNC(SYSDATE, 'MONTH') + LEVEL - 1 AS FDATE
FROM DUAL
CONNECT BY LEVEL = 31) T
WHERE TO_CHAR(FDATE, 'MM') = TO_CHAR(SYSDATE, 'MM')
--2、以上边的表作为左链接的表,与你的数据表的日期做关联查询就可以得出你要的结果
SELECT A.FDATE, NVL(B.FNUM, 0)
FROM (SELECT FDATE
FROM (SELECT TRUNC(SYSDATE, 'MONTH') + LEVEL - 1 AS FDATE
FROM DUAL
CONNECT BY LEVEL = 31) T
WHERE TO_CHAR(FDATE, 'MM') = TO_CHAR(SYSDATE, 'MM')) A
LEFT JOIN (SELECT 日期字段名 AS FDATE, COUNT(1) AS FNUM
FROM 表名 B
WHERE TO_CHAR(日期字段名, 'YYYYMM') = TO_CHAR(SYSDATE, 'YYYYMM')
GROUP BY 日期字段名) B
ON A.FDATE = B.FDATE
ORDER BY A.FDATE