1

我通过这个进行 sql 查询,我想计算05:00:00 PM前后 的记录。05:00:00 PM这里是 smy 查询,但是通过这个我得到错误的结果,如果有任何逻辑错误,请任何人检查一下

Select trunc(gross_weight_date) date1,
count(*) before5 
from wbg.WBG_01_01
where to_char(gross_weight_date,'HH:MI:SS PM')>'05:00:00 PM'
and item_cod = 16
and trunc(gross_weight_date)='05-JAN-2012' 
group by trunc(gross_weight_date)
order by date1

任何帮助都可以赞赏

4

2 回答 2

3
  1. 不要使用 VARCHAR2 比较日期,因为字符的排序顺序与数字不同(“12”在“5”之前)。
  2. 不要将苹果与橙子进行比较(trunc(gross_weight_date)是日期,'05-JAN-2012'而是 VARCHAR2)。

处理日期时,您可以使用日期函数和日期算术,而无需求助于转换,例如:

Select trunc(gross_weight_date) date1, count(*) before5 
  from wbg.WBG_01_01
 where item_cod = 16
   and gross_weight_date > to_date('05-01-2012', 'DD-MM-YYYY') + 17/24 
   and gross_weight_date < to_date('05-01-2012', 'DD-MM-YYYY') + 1 
 group by trunc(gross_weight_date)
 order by date1

或者

Select trunc(gross_weight_date) date1, count(*) before5 
  from wbg.WBG_01_01
 where item_cod = 16
   and gross_weight_date > to_date('05-01-2012', 'DD-MM-YYYY') 
                           + numtodsinterval(17, 'HOUR') 
   and gross_weight_date < to_date('05-01-2012', 'DD-MM-YYYY')
                           + numtodsinterval(1, 'DAY')
 group by trunc(gross_weight_date)
 order by date1
于 2012-06-20T09:31:51.640 回答
3

chars用于比较日期。那将无法正常工作。


由于您只想在下午 5 点之后进行比较,因此这里有一个更简单的解决方案:

Select trunc(gross_weight_date) date1,
count(*) before5 
from wbg.WBG_01_01
where to_number(to_char(gross_weight_date, 'HH24MISS')) > 150000
and item_cod = 16
and trunc(gross_weight_date)='05-JAN-2012' 
group by trunc(gross_weight_date)
order by date1

它将日期的值传递给一个字符 ('171212'),然后传递给一个数字 (171212),并将其与 150000 进行比较。

于 2012-06-20T09:22:01.020 回答