在sql中设置日期条件与提取日期和d1和d2之间的日期有什么区别

时间:2017-05-02 09:26:12

标签: sql oracle date

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

查询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

为什么我会得到不同的结果?

2 个答案:

答案 0 :(得分:3)

第一个查询获取值介于Labelname.Text = string.Join(" ", new []{ this.Session["First Name"], this.Session["Middle Name"], this.Session["Last Name"]}); 2017-02-11 00:00:00之间的值。

第二个查询获取值介于2017-02-17 00:00:002017-02-11 00:00:00之间的值。

因此,如果2017-02-17 23:59:592017-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上基于函数的索引。)

答案 1 :(得分:0)

TO_DATE - 将字符串转换为Datetime,并且在第一个查询中内部使用HH:MI:SS的内部子句,为了从第二个查询得到相同的结果,需要在第二个查询中关注HH:MI:SS