如何在SQL中的上午,下午或晚上找到时间戳

时间:2019-02-28 21:45:28

标签: sql sql-server

我必须找出表中的时间戳记是上午,下午还是晚上。目前,我有以下代码:

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,所以它被评估为下午。相反,我想包括分钟部分,然后将其变成晚上。

1 个答案:

答案 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表达式中可以轻松进行调整。