我怎样才能改写这个陈述?

时间:2009-12-19 06:37:33

标签: sql sql-server sql-server-2005 tsql

我已声明变量@date

SELECT @date = CASE 
      WHEN MAX(dt) IS NULL THEN '31/12/2009' 
      ELSE MAX(dt) + 1 
  END 
  FROM mytab

我正在使用本地变量

的代码段
CASE 
  WHEN MAX(DateValue)= @date THEN NULL 
  ELSE CONVERT(varchar(10), CONVERT(datetime, MAX(DateValue)), 103) 
END AS newdt

我不想在case语句中使用@date局部变量,但想要获得相同的效果。我试过了:

CASE 
  WHEN MAX(DateValue)= @isnull(dt, '31/12/2009') 
  ELSE CONVERT(varchar(10), CONVERT(datetime, MAX(DateValue)), 103) 
END AS newdt 

但收到错误。有什么想摆脱这个吗?

2 个答案:

答案 0 :(得分:1)

好的,首先你需要使用

ISNULL(dt, '31/12/2009')

没有 @

其次,您需要提供更完整的查询供我们检查。另外,请指定您收到的错误。

您还可以在第二个选择中包含原始选择。像这样:

CASE 
   WHEN MAX(DateValue)= (SELECT CASE WHEN MAX(dt) IS NULL THEN '31/12/2009' ELSE MAX(dt) + 1 END FROM mytab)
   ELSE CONVERT(varchar(10), CONVERT(datetime, MAX(DateValue)), 103) 
END AS newdt 

答案 1 :(得分:0)

CASE 
  WHEN MAX(DateValue)= isnull(dt, '31/12/2009') 
  ELSE CONVERT(varchar(10), CONVERT(datetime, MAX(DateValue)), 103) 
END AS newdt