2016-03-01 28 views
0

我已经创建了一个case语句以按此顺序工作。SQL Server - 在案例陈述中组合日期字段,文字字符和DATEADD值

确定它是“优先级升级”,“准备好代答”,“等待路由”,否则为日期范围。

上述工作如果我排除ELSE案件陈述的一部分。如果没有其他情况是真的,那么我需要我的其他声明来产生一个装运日期加上装运日期的2天,以给出货物装运时的日期范围。即02/15/2016 – 02/17/2016

Select 
    Case 
     When datediff (day, sl.[Shipment Date], sl.[Priority Escalation Date]) < 0 then 'Priority Escalation' 
     When sh.[On Hold] = 'RFP' then 'Ready for Pickup' 
     When sh.[On Hold] = 'WFR' then 'Waiting for Routing' 
     Else sl.[Shipment date] + “ – “ + & DateAdd("d", 2, sl.[Shipment Date]) 
    End as 'Expected Value' 

这是该数据应该是什么样子

Expected Value 
02/24/2016 - 02/26/2016 
02/24/2016 - 02/26/2016 
02/24/2016 - 02/26/2016 
02/24/2016 - 02/26/2016 
Waiting for Routing 
Waiting for Routing 
Priority Escalation 
Ready for Pickup 
Ready for Pickup 
Priority Escalation 
Priority Escalation 
Priority Escalation 
Ready for Pickup 
+0

您的样品数据在哪里? –

回答

3

您可能会运行到转换错误。要解决该问题,您需要将CONVERT您的日期改为VARCHAR

SELECT 
    CASE 
     WHEN DATEDIFF (DAY, sl.[Shipment Date], sl.[Priority Escalation Date]) < 0 THEN 'Priority Escalation' 
     WHEN sh.[On Hold] = 'RFP' THEN 'Ready for Pickup' 
     WHEN sh.[On Hold] = 'WFR' THEN 'Waiting for Routing' 
     ELSE CONVERT(VARCHAR(10), sl.[Shipment date], 101) + ' - ' 
       + CONVERT(VARCHAR(10), DATEADD(DAY, 2, sl.[Shipment Date]), 101) 
    END AS 'Expected Value' 
+1

谢谢Felix!我很欣赏快速反应,并希望你知道它现在以我需要的方式工作。 – pcri