我必须找出表中的时间戳记是上午,下午还是晚上。目前,我有以下代码:
case
when datepart(hour, o.timestamp) between 5 and 12
then 'Morning'
when datepart(hour, o.timestamp) between 13 and 17
then 'Afternoon'
when datepart(hour, o.timestamp) > 17
then 'Evening'
end
上述代码的问题是2018-08-03 17:30:00.000在下午而不是晚上出现。那是因为2018-08-03 17:30:00.000的小时是17,所以它被评估为下午。相反,我想包括分钟部分,然后将其变成晚上。
答案 0 :(得分:1)
时间比较怎么样?
(case when convert(time, o.timestamp) >= '05:00:00' and
convert(time, o.timestamp) < '12:00:00'
then 'morning'
when convert(time, o.timestamp) >= '12:00:00' and
convert(time, o.timestamp) < '17:00:00'
then 'afternoon'
else 'evening'
end)
请注意,您的逻辑不考虑午夜至凌晨5点之间的时间。
您可以使用小时本身进行类似的操作,但是我认为时间不会让您感到困惑。另外,我不知道早上的边界是真的中午还是下午1:00。您的查询显示边界是下午1:00。常识提示中午。在case
表达式中可以轻松进行调整。