案例陈述中的硬编码日期比较

时间:2018-09-29 06:06:05

标签: sql-server case date-comparison

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

2 个答案:

答案 0 :(得分:0)

这可能是您想要的查询

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()返回日期和时间。如果您仅对日期感兴趣,则可以使用convert(date, getdate())转换为仅日期

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

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

答案 1 :(得分:0)

在您的查询变量名中,声明和选择不相同,我只删除了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

下面的链接是小提琴链接,我只检查您的查询

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