case语句在sql中生成两个值?

时间:2014-05-21 20:32:29

标签: sql-server sql-server-2008 tsql sql-server-2008-r2 case

我有一个表格期间

Periods
presentday
presentday+1
presentday+2
presentday+3
Presenday
presentday+1
presentday+2
presentday+3

我的查询以获取句点=当前日期的案例

SELECT 
  REPLACE(SUBSTRING(convert(varchar, getdate(), 113),1,11),' ','-') as StartDate
 ,REPLACE(SUBSTRING(convert(varchar, getdate(), 113),1,11),' ','-') as EndDate
from Periods where Periods='Presentday'

我如何为上述查询编写案例陈述?

2 个答案:

答案 0 :(得分:1)

这是我能想到的最好的方法,试图理解这个问题。

create table Periods(Period varchar(30))
insert Periods
select 'presentday' union 
select 'presentday+1' union 
select 'presentday+2' union 
select 'presentday+3'

select p.Period,
        REPLACE(SUBSTRING(convert(varchar, getdate(), 113),1,11),' ','-') as StartDate,
        case when p.Period = 'presentday' then REPLACE(SUBSTRING(convert(varchar, getdate(), 113),1,11),' ','-')
            when p.Period = 'presentday+1' then REPLACE(SUBSTRING(convert(varchar, dateadd(d,1,getdate()), 113),1,11),' ','-')
            when p.Period = 'presentday+2' then REPLACE(SUBSTRING(convert(varchar, dateadd(d,2,getdate()), 113),1,11),' ','-')
            when p.Period = 'presentday+3' then REPLACE(SUBSTRING(convert(varchar, dateadd(d,3,getdate()), 113),1,11),' ','-') end as EndDate

from Periods p

答案 1 :(得分:1)

如果有一些数字可以从Periods表中可靠地获得,那么这是更动态的:

select p.Period,
        REPLACE(SUBSTRING(convert(varchar, getdate(), 113),1,11),' ','-') as StartDate,
        case
            when p.Period = 'presentday' then REPLACE(SUBSTRING(convert(varchar, getdate(), 113),1,11),' ','-')
            else REPLACE(SUBSTRING(convert(varchar, dateadd(d,cast(right(p.Period,1) as int),getdate()), 113),1,11),' ','-')
        end
from periods p