我找不到解决方案如何在Oracle中使用Select by语句。
我需要按时间戳列分组工作时间段(“当天”的09:00到21:00)和第二个时间段(从前一天的21:01到“当天”的08:59) 在一个山区内。
欢迎任何建议。 感谢。
答案 0 :(得分:1)
此分组的关键是从日期时间中减去9小时以获得“工作日期”,然后使用hour
函数确定它是工作时间还是其他内容。这是一个例子:
select trunc(worktime - 9.0/24) as workdate,
(case when hour(worktime) between 8 and 20 then 'WorkHours' else 'OtherHours' end),
count(*)
from t
group by trunc(worktime - 9.0/24),
(case when hour(worktime) between 8 and 20 then 'WorkHours' else 'OtherHours' end);
要检查特定月份,您可能希望使用workdate
而不是实际日期(因此该月的前9个小时实际上是上个月的一部分)。
答案 1 :(得分:0)
group by
trunc(timestamp_col, 'MM')
, case
when to_char(timestamp_col, 'hh24') between '08' and '20'
then 'work'
else 'other'
end
trunc(timestamp_col, 'MM')
- 给你一个月
case
when to_char(timestamp_col, 'hh24') between '08' and '20'
then 'work'
else 'other'
end
- 给你“工作”或“其他”