我写了两个查询,我期望给我相同的数据。
查询1
select transaction, count(*)
from table
where create_date between to_Date('02/11/2017','MM/DD/YYYY') and to_date('02/17/2017','MM/DD/YYYY')
group by transaction
查询2
select transaction, count(*)
from table
where extract(day from create_date) between 11 and 17
and extract(month from create_date)=2
and extract(year from create_date)=2017
group by transaction
查询1
的结果Transaction1 1155
Transaction2 333
Transaction3 5188
查询2
的结果Transaction1 1422
Transaction2 415
Transaction3 6155
为什么我会得到不同的结果?
第一个查询获取值在 2017-02-11 00:00:00
和 2017-02-17 00:00:00
之间的值。
第二查询获取值在 2017-02-11 00:00:00
和 2017-02-17 23:59:59
之间的值。
因此,如果2017-02-17 00:00:01
和2017-02-17 23:59:59
之间存在值,则它们将包含在第二个查询的COUNT
中,而不是第一个。
尝试:
select transaction, count(*)
from table
where create_date >= DATE '2017-02-11'
AND create_date < DATE '2017-02-18'
group by transaction
或
select transaction, count(*)
from table
where TRUNC( create_date ) BETWEEN DATE '2017-02-11' AND DATE '2017-02-18'
group by transaction
(注意:以后的查询将不使用create_date
上的索引,而是需要TRUNC( create_date )
上的基于功能的索引。(
to_date-将字符串转换为dateTime,在内部第一个查询中的子句中的第一个查询中的ss在hh:mi:ss上工作,第二个从第二个角度来看:mi:您的第二个查询中的SS