使用case语句SQL Server

时间:2017-09-14 13:41:13

标签: sql sql-server insert case

我想要做的是当数字为'NULL'时,我希望它在日期列中显示昨天的日期。

             Date                 Person     Team   Figure
    -------------------------------------------------------
    2017-09-01 00:00:00.000        Joe         1     NULL
    2017-09-01 00:00:00.000        Tim         1     NULL
    2017-09-01 00:00:00.000        Sam         1     NULL
    2017-09-04 00:00:00.000        Ben         1     NULL
    2017-09-04 00:00:00.000        Matt        1     NULL
    2017-09-05 00:00:00.000        Alex        1     NULL

结果:

             Date                 Person     Team   Figure
    2017-09-13 00:00:00.000        Joe         1     NULL
    2017-09-13 00:00:00.000        Tim         1     NULL

我试过了

    DECLARE @Yesterday DATETIME
    SET @Yesterday = DateAdd(DD, DateDiff(DD, 0, GETDATE())-1, 0)

    CASE WHEN D.[Figure] IS NULL THEN
    @Yesterday
    ELSE D.[DATE] END

但我得到了这个结果

    Date                       Person   Team       Figure   Month    (No column name)
    2017-09-01 00:00:00.000     Joe      1          NULL    1125    2017-09-13 00:00:00.000
    2017-09-01 00:00:00.000     Alex     1          NULL    177     2017-09-13 00:00:00.000

如何在此案例陈述的日期栏中更改此内容?

3 个答案:

答案 0 :(得分:1)

我认为代码可能会因为你正在做的事情而略微过于复杂。我只想说:

select  case when DF.[Figure] is null
        then DateAdd(day,-1,getdate())
        else DF.[Date]
        end as [Date],...

答案 1 :(得分:0)

因此,不必直接选择日期,而是必须在以下内容中使用CASE表达式:

SELECT CASE WHEN D.[Figure] IS NULL THEN DATEADD(DAY, -1, GETDATE())
            ELSE D.[DATE] 
       END AS [Date],
       Person,
       Team,
       Figure, 
       Month
FROM Tbl AS D

答案 2 :(得分:0)

  

我想要做的是当数字为'NULL'时,我希望它在日期字段中显示昨天的日期。

如果这是你想要的,那么你会这样做:

select . . .,
       coalesce(figure, cast(getdate() - 1 as date)) as figure

根据您的示例数据,我不确定这是您真正想要的,但这正是您所要求的。