Case Statement Sql多列检查日期

时间:2013-09-09 21:17:24

标签: sql sql-server case

我有一个使用case语句的存储过程如下:我要做的是评估testTable中的2列日期。所以下面的case语句说如果stop_date为null或大于当前日期,则设置is_active cloumn为Y else N

我要做的还是评估另一个日期列,说另一个_stop_date并检查它是否为null或者日期大于今天并使用相同的逻辑来更新is_active列

我不确定我们是否可以使用多个case语句来更新单个列?

我已经评论了下面的代码,我没有得到正确的结果

基本上需要从testTable中评估stop_dt和another_stop_date列!

USE [Test]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROC [dbo].[p_test]
@Blank_Row CHAR(1) = 'N'

AS
BEGIN

SET NOCOUNT ON

DECLARE @TD  DATETIME

SELECT @TD = GETDATE()

DECLARE @tempTable TABLE (

ID INT,
c_id   INT,
desc varchar(40),
date datetime,
s_col  TinyINT,
is_active char(1),
stuff VARCHAR(8))


 INSERT INTO @tempTable

 SELECT id, c_id, desc, max( date ), 1,

 CASE WHEN (stop_dt IS NULL OR stop_dt > @TD) THEN 'Y' 
 --//Case When (another_stop_date is NULL or another Stop_date > @TD) THEN 'Y'<-----confused here
 ELSE 'N' END,

 stuff

 FROM testTable

 GROUP BY id, stop_dt, c_id, desc, stuff, another_stop_date

 Select * from tempTable

2 个答案:

答案 0 :(得分:3)

您可以将case语句中的子句与通常的逻辑运算符结合使用,也可以使用单独的case:

Case 
    When 
        (stop_dt is null or stop_dt > @td) and
        (another_stop_date is null or another_stop_date > @td) 
    Then 'Y' 
    Else 'N' 
End

答案 1 :(得分:0)

Case语句在if语句附近运行,可以有多个子句。

Case when condition_1 > 1 then 'hi'
when condition_1 < 14 then 'no'
when condition_89 > 12 then 'why is this here'
else 1
end

将其应用于您的陈述:

 CASE WHEN (stop_dt IS NULL OR stop_dt > @TD) THEN 'Y' 
 When (another_stop_date is NULL or another Stop_date > @TD) THEN 'Y'<-----confused here
 ELSE 'N' END