SQL中D1和D2之间的提取日期和日期设置日期条件之间有什么区别?



我写了两个查询,我期望给我相同的数据。

查询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:002017-02-17 00:00:00之间的值。

第二查询获取值在 2017-02-11 00:00:002017-02-17 23:59:59之间的值。

因此,如果2017-02-17 00:00:012017-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

最新更新