[英]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:00
至14:30:00
晚上14:31:00
时间为14:31:00
至23: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.