我写了两个查询,我希望能给我相同的数据。
查询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
为什么我会得到不同的结果?
答案 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: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
上基于函数的索引。)
答案 1 :(得分:0)
TO_DATE - 将字符串转换为Datetime,并且在第一个查询中内部使用HH:MI:SS的内部子句,为了从第二个查询得到相同的结果,需要在第二个查询中关注HH:MI:SS