如何在我的 Date 变量上实现这个 CASE 语句逻辑?
How to implement this CASE Statement logic on my Date variable?
我正在使用 SQL Server 2014
,我需要在我的 T-SQL 查询中实施特定的 CASE STATEMENT 逻辑。
我需要根据 Table 我是 运行 查询的列在我的输出中创建一个新列(Period)。此列将根据我的 Table.
中的“StayDate”列包含“高峰期”或“非高峰期”
“住宿日期”列的格式为 (YYYY-MM-DD):2020-12-25
这里是 Case 语句逻辑:
如果日期介于 12 月 21 日和 1 月 3 日之间,则为“高峰期”,否则为“非高峰期”。
我的案例陈述如下:
(CASE WHEN (DATEPART(DAY, [StayDate]) in (21,22,23,24,25,26,27,28,29,30,31,1,2,3)
AND DATEPART(MONTH, [StayDate]) in (12,1) ) THEN 'Peak'
Else 'Off-Peak'
End) as 'Period'
虽然可行,但我觉得这不是最优雅的解决方案。
有没有更有效的方法?
If the dates are between 21 December and 03 January, then it will be "Peak", else "Off-Peak".
我认为您的逻辑不成立,因为 12 月 1 日和 1 月 24 日不是高峰期。正确的逻辑是:
(CASE WHEN MONTH(StayDate) = 12 AND DAY(StayDate) >= 21
THEN 'Peak'
WHEN MONTH(StayDate) = 1 AND DAY(StayDate) <= 3
THEN 'Peak'
ELSE 'Off-Peak'
END) as Period
我正在使用 SQL Server 2014
,我需要在我的 T-SQL 查询中实施特定的 CASE STATEMENT 逻辑。
我需要根据 Table 我是 运行 查询的列在我的输出中创建一个新列(Period)。此列将根据我的 Table.
中的“StayDate”列包含“高峰期”或“非高峰期”“住宿日期”列的格式为 (YYYY-MM-DD):2020-12-25
这里是 Case 语句逻辑:
如果日期介于 12 月 21 日和 1 月 3 日之间,则为“高峰期”,否则为“非高峰期”。
我的案例陈述如下:
(CASE WHEN (DATEPART(DAY, [StayDate]) in (21,22,23,24,25,26,27,28,29,30,31,1,2,3)
AND DATEPART(MONTH, [StayDate]) in (12,1) ) THEN 'Peak'
Else 'Off-Peak'
End) as 'Period'
虽然可行,但我觉得这不是最优雅的解决方案。
有没有更有效的方法?
If the dates are between 21 December and 03 January, then it will be "Peak", else "Off-Peak".
我认为您的逻辑不成立,因为 12 月 1 日和 1 月 24 日不是高峰期。正确的逻辑是:
(CASE WHEN MONTH(StayDate) = 12 AND DAY(StayDate) >= 21
THEN 'Peak'
WHEN MONTH(StayDate) = 1 AND DAY(StayDate) <= 3
THEN 'Peak'
ELSE 'Off-Peak'
END) as Period