当前位置: 代码迷 >> Oracle开发 >> oracle 时间查询的有关问题,可能与时区相关,TRUNC函数
  详细解决方案

oracle 时间查询的有关问题,可能与时区相关,TRUNC函数

热度:101   发布时间:2016-04-24 07:02:06.0
oracle 时间查询的问题,可能与时区相关,TRUNC函数

select count(1)
  from tbl_wftt_datasource d
 where d.createn_submit_100020 >= TRUNC(ADD_MONTHS(SYSDATE, -2), 'MM')
   and TRUNC(createn_submit_100020, 'MM') =
       TRUNC(ADD_MONTHS(SYSDATE, -2), 'MM')
 group by TRUNC(createn_submit_100020, 'MM');

select count(1)
  from tbl_wftt_datasource d
 where d.createn_submit_100020 >= TRUNC(ADD_MONTHS(SYSDATE, -2), 'MM')
   and d.createn_submit_100020 < TRUNC(ADD_MONTHS(SYSDATE, -1), 'MM');


这样两条SQL语句,查询出来的值相差一些,第二个多些。到底为什么呢,求指导?
Oracle SQL select

------解决方案--------------------
第一条有group by,有聚合自然数据会少,d.createn_submit_100020 >= TRUNC(ADD_MONTHS(SYSDATE, -2), 'MM')的条件多余。

都是查询上上月的数据,尽量不要对字段做函数TRUNC(createn_submit_100020, 'MM'),大数据量时性能会降低。

推荐第二种方法。
------解决方案--------------------
select count(1)
  from tbl_wftt_datasource d
 where d.createn_submit_100020 >= TRUNC(ADD_MONTHS(SYSDATE, -2), 'MM')
   and TRUNC(createn_submit_100020, 'MM') =
       TRUNC(ADD_MONTHS(SYSDATE, -2), 'MM')
 group by TRUNC(createn_submit_100020, 'MM');

--这个查询出来的结果是按TRUNC(createn_submit_100020, 'MM')值分组,求每一组对应的数量(count(1)),这样出来的是有多少个分组,就有多少记录。他的结果集等同于
select TRUNC(createn_submit_100020, 'MM'),count(1)
  from tbl_wftt_datasource d
 where d.createn_submit_100020 >= TRUNC(ADD_MONTHS(SYSDATE, -2), 'MM')
   and TRUNC(createn_submit_100020, 'MM') =
       TRUNC(ADD_MONTHS(SYSDATE, -2), 'MM')
 group by TRUNC(createn_submit_100020, 'MM');

--
select count(1)
  from tbl_wftt_datasource d
 where d.createn_submit_100020 >= TRUNC(ADD_MONTHS(SYSDATE, -2), 'MM')
   and d.createn_submit_100020 < TRUNC(ADD_MONTHS(SYSDATE, -1), 'MM');
--这个查询是直接统计符合查询条件的记录数。

两个查询意义不同,比较他们的值也没有意义。不知道楼主想问的是具体是什么
------解决方案--------------------
你这两个SQL写法就有问题。。
你要进行GroupBy为什么直接写Count出结果?
  相关解决方案