比较存储为整数的日期和日期时间

时间:2019-05-31 20:55:49

标签: sql sql-server sql-server-2008 datetime

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

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

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

我尝试将Int转换为datetime / date。从日期到int,反之亦然,仍然无法正常工作。

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

2 个答案:

答案 0 :(得分:3)

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

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

并与datetime列进行比较,例如:

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

答案 1 :(得分:0)

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

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