繁体   English   中英

在Oracle SQL中按时间查询数据

[英]Querying data by time in Oracle SQL

我在Oracle中有一张表,其中的数据是从不同来源插入的。 2014年,我们发现某些来源未在日期中插入时间戳,但是我们对其进行了修复,现在所有来源05/04/2015 4:30:42 PM正确的格式插入数据,例如05/04/2015 4:30:42 PM

通过使用SQL查询,我们希望将数据分为3种类型,晨班,晚班和无班(对于没有时间戳的数据)。

早班时间为00:00:0014:30:00

晚上14:31:00时间为14:31:0023:59:00

我用以下两种不同的方式编写了查询:

(一种)

 CASE
        WHEN TO_DATE(DATEANDTIME,'MM/DD/YYYY HH24:MI:SS') BETWEEN (TO_DATE ('00:00:00', 'HH24:MI:SS')) AND (TO_DATE ('14:30:00', 'HH24:MI:SS'))
        THEN
           'MORNING SHIFT'
        WHEN TO_DATE(DATEANDTIME,'MM/DD/YYYY HH24:MI:SS') BETWEEN (TO_DATE ('14:31:00', 'HH24:MI:SS')) AND  (TO_DATE ('23:59:00', 'HH24:MI:SS'))
        THEN
           'EVENING SHIFT'
        ELSE
          'NO SHIFT'
     END SHIFT

(b)中

CASE
        WHEN DATEANDTIME BETWEEN (TO_DATE ('00:00:00', 'HH24:MI:SS')) AND (TO_DATE ('14:30:00', 'HH24:MI:SS'))
        THEN
           'MORNING SHIFT'
        WHEN DATEANDTIME BETWEEN (TO_DATE ('14:31:00', 'HH24:MI:SS')) AND  (TO_DATE ('23:59:00', 'HH24:MI:SS'))
        THEN
           'EVENING SHIFT'
        ELSE
          'NO SHIFT'
     END SHIFT

查询(一)返回一个错误ORA-01858: a non-numeric character was found where a numeric was expected ,但查询(b)展示的一切数据将NO SHIFT

该表的样本数据如下日期和dateandtime字段:

05/04/2015 10:43
05/04/2015 16:52
05/04/2015 19:27
11/04/2009

请指导我正确的查询和我在做什么错,相同的条件在TOAD正常工作。

您可以将值转换为字符串,然后以字符串形式进行比较:

(case when to_char(dateandtime, 'HH24:MI') BETWEEN '00:00' and '14:30'
      then 'MORNING SHIFT'
      when to_char(dateandtime, 'HH24:MI') BETWEEN '14:31' and '23:59'
      then 'EVENING SHIFT'
      else 'NO SHIFT'
 end) as SHIFT

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM