【问题标题】:Case statement to generate two values in sql?在sql中生成两个值的case语句?
【发布时间】:2014-07-10 16:30:40
【问题描述】:

我有一个表格周期

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

当 period=Present Day 时获取案例的查询

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'

如何为上述查询编写案例语句??

【问题讨论】:

  • CASE语句做什么?
  • How can i write a case statement for above query 为什么发布的查询还需要 case 语句?
  • CASE语句做什么?你想要的输出是什么?
  • @M.Ali 实际上我正在编写一个存储过程,它将检查 Periods 表中的每一行并获取 startdate 和 Enddate。
  • 设身处地想一想,如果有人向您展示这些数据并提出您提出的问题,您是否能够理解这个问题? StartDate 和 enddate 是什么?

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


【解决方案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

【讨论】:

    【解决方案2】:

    如果您可以从 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
    

    【讨论】:

    • 将 varchar 值 'Y' 转换为数据类型 int 时转换失败。
    猜你喜欢
    • 1970-01-01
    • 2022-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多