case 语句中的硬代码日期比较

Hard code date comparison in case statement

getdate 介于两个日期之间时,需要帮助获取第一个日期。 尝试使用以下代码,但语法不正确。我想从下面的代码中得到 2018-09-29 的输出:

 DECLARE @Fromdt datetime

 set @fromdt= (select case 
                when getdate()>='2018-09-01' and  getdate()<='2018-09-13' then '2018-09-01'
                when getdate()>='2018-09-15' and  getdate()<='2018-09-27' then '2018-09-27'
                when getdate()>='2018-09-29' and  getdate()<='2018-10-10' then '2018-09-29'
                when getdate()>='2018-10-12' and  getdate()<='2018-10-24' then '2018-10-12' 
  end as frmdt from table1)

select @frmdt

这可能是您想要的查询

select @fromdt = case 
                 when getdate()>='2018-09-01' and  getdate()<='2018-09-13' then '2018-09-01'
                 when getdate()>='2018-09-15' and  getdate()<='2018-09-27' then '2018-09-27'
                 when getdate()>='2018-09-29' and  getdate()<='2018-10-10' then '2018-09-29'
                 when getdate()>='2018-10-12' and  getdate()<='2018-10-24' then '2018-10-12' 
                 end

请注意 getdate() returns 日期和时间。如果您只对日期感兴趣,可以使用 convert(date, getdate()) 转换为日期

您可以声明一个 current_date 变量并在您的查询中使用它

declare @current_date date
select @current_date = getdate();

在声明和选择中的查询变量名称不相同,我只是删除 from table1 它工作正常

DECLARE @Fromdt datetime    
 set @fromdt= (select case 
                when getdate()>='2018-09-01' and  getdate()<='2018-09-13' then '2018-09-01'
                when getdate()>='2018-09-15' and  getdate()<='2018-09-27' then '2018-09-27'
                when getdate()>='2018-09-29' and  getdate()<='2018-10-10' then '2018-09-29'
                when getdate()>='2018-10-12' and  getdate()<='2018-10-24' then '2018-10-12' 
  end as frmdt)

select @Fromdt

link 下方是 fiddle link,我刚刚检查了您的查询

https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=fbdf363ef76e176c4cf34f63cf07cfab