时间字段的案例说明
Case Statement of time field
使用这个 case 语句,并且可以对第一个条件使用一些帮助:
case
when convert(varchar, tblrelease.releaseddt, 108) BETWEEN '22:00:00' AND '06:00:00' then '10PM to 6AM' -- 1st
when convert(varchar, tblrelease.releaseddt, 108) BETWEEN '06:00:00' AND '14:00:00' then '6AM to 2PM' -- 2nd
when convert(varchar, tblrelease.releaseddt, 108) BETWEEN '14:00:00' AND '22:00:00' then '2PM to 10PM' -- 3rd
else 'UNDEFINED'
end AS [Shift],
第一种情况不是 return“晚上 10 点到早上 6 点”。它应该 return 所述的值。请查看示例 table 结果:
tblrelease.releaseddt = (smalldatetime, null)
根据语法,我假设您使用的是 SQL 服务器。处理这段代码最简单的方法可能是关注时间:
(case when datepart(hour, tblrelease.releaseddt) between 6 and 13
then '6AM to 2PM'
when datepart(hour, tblrelease.releaseddt) between 14 and 20
then '2PM to 10PM'
when tblrelease.releaseddt is not null
then '10PM to 6AM'
else 'UNDEFINED'
end) as Shift,
您也可以使用 time
:
(case when convert(time, tblrelease.releaseddt) >= '06:00:00' and
convert(time, tblrelease.releaseddt) < '14:00:00'
then '6AM to 2PM' -- 2nd
when convert(time, tblrelease.releaseddt) >= '14:00:00' and
convert(time, tblrelease.releaseddt) < '22:00:00'
when tblrelease.releaseddt is not null
then '10PM to 6AM'
else 'UNDEFINED'
end) as Shift,
这通过先查看其他两个班次来解决午夜问题。请注意,没有理由转换为字符串来完成此操作。并且不推荐BETWEEN
。您的代码对于边界的去向不明确。
将午夜前后的查询分开
case
when (convert(varchar, tblrelease.releaseddt, 108) BETWEEN '22:00:00' AND '23:59:59') OR
(convert(varchar, tblrelease.releaseddt, 108) BETWEEN '00:00:00' AND '06:00:00') then '10PM to 6AM' -- 1st
when convert(varchar, tblrelease.releaseddt, 108) BETWEEN '06:00:00' AND '14:00:00' then '6AM to 2PM' -- 2nd
when convert(varchar, tblrelease.releaseddt, 108) BETWEEN '14:00:00' AND '22:00:00' then '2PM to 10PM' -- 3rd
else 'UNDEFINED'
end AS [Shift],
使用这个 case 语句,并且可以对第一个条件使用一些帮助:
case
when convert(varchar, tblrelease.releaseddt, 108) BETWEEN '22:00:00' AND '06:00:00' then '10PM to 6AM' -- 1st
when convert(varchar, tblrelease.releaseddt, 108) BETWEEN '06:00:00' AND '14:00:00' then '6AM to 2PM' -- 2nd
when convert(varchar, tblrelease.releaseddt, 108) BETWEEN '14:00:00' AND '22:00:00' then '2PM to 10PM' -- 3rd
else 'UNDEFINED'
end AS [Shift],
第一种情况不是 return“晚上 10 点到早上 6 点”。它应该 return 所述的值。请查看示例 table 结果:
tblrelease.releaseddt = (smalldatetime, null)
根据语法,我假设您使用的是 SQL 服务器。处理这段代码最简单的方法可能是关注时间:
(case when datepart(hour, tblrelease.releaseddt) between 6 and 13
then '6AM to 2PM'
when datepart(hour, tblrelease.releaseddt) between 14 and 20
then '2PM to 10PM'
when tblrelease.releaseddt is not null
then '10PM to 6AM'
else 'UNDEFINED'
end) as Shift,
您也可以使用 time
:
(case when convert(time, tblrelease.releaseddt) >= '06:00:00' and
convert(time, tblrelease.releaseddt) < '14:00:00'
then '6AM to 2PM' -- 2nd
when convert(time, tblrelease.releaseddt) >= '14:00:00' and
convert(time, tblrelease.releaseddt) < '22:00:00'
when tblrelease.releaseddt is not null
then '10PM to 6AM'
else 'UNDEFINED'
end) as Shift,
这通过先查看其他两个班次来解决午夜问题。请注意,没有理由转换为字符串来完成此操作。并且不推荐BETWEEN
。您的代码对于边界的去向不明确。
将午夜前后的查询分开
case
when (convert(varchar, tblrelease.releaseddt, 108) BETWEEN '22:00:00' AND '23:59:59') OR
(convert(varchar, tblrelease.releaseddt, 108) BETWEEN '00:00:00' AND '06:00:00') then '10PM to 6AM' -- 1st
when convert(varchar, tblrelease.releaseddt, 108) BETWEEN '06:00:00' AND '14:00:00' then '6AM to 2PM' -- 2nd
when convert(varchar, tblrelease.releaseddt, 108) BETWEEN '14:00:00' AND '22:00:00' then '2PM to 10PM' -- 3rd
else 'UNDEFINED'
end AS [Shift],