如何在我的 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