将存储为整数的日期与日期时间进行比较

Compare date stored as an integer with a datetime

我有一个数据类型为整数的列,格式为 yyyymm(例如 201905)。我想检查此列是否在开始日期和结束日期之间,即:

case 
  when [cov_yyyymm] between [start_dt] and [end_dt] then 'Period1'
  else 'OtherPeriod' 
end

注意:开始和结束日期是日期时间

我试过将 Int 转换为 datetime/date。同样,从日期到整数,反之亦然,但仍然无法正常工作。

我希望使用 CASE 语句来比较整数是否在两个日期之间。

您可以像这样将其转换为日期时间:

SELECT CAST(CAST(201905 AS VARCHAR(6)) + '01' AS DATETIME)

并像这样与日期时间列进行比较:

WHERE CAST(CAST(201905 AS VARCHAR(6)) + '01' AS DATETIME) BETWEEN start_dt AND end_dt

您的经期采用 yyyymm 格式,因此下一条语句是另一种可能的方法。当时间段和日期来自一个月时,这种方法很有用——比如时间段 201905 和日期 2019-05-032019-05-20。将一天(一个月的第一天或最后一天)添加到整数期间 (yyymm) 并与日期时间值进行比较并不总是正确的。

case 
  when [cov_yyyymm] between 
      (YEAR([start_dt])*100 + MONTH([start_dt])) and 
      (YEAR([end_dt])*100 + MONTH([end_dt])) then 'Period1'
  else 'OtherPeriod' 
end