SQL默认ELSE值

时间:2012-12-28 13:27:46

标签: sql sql-server-2008-r2

在下面的sql查询中我有一个没有其他的选择案例

 SET dateformat mdy 
    DECLARE @DATE1 DATETIME 
    SET @DATE1 = '12/31/2011' 
    DECLARE @DATE2 DATETIME 
    SET @DATE2 = '06/01/2012' 


    UPDATE tablx
    SET xdate = case WHEN xdate is null and odate BETWEEN @Date1 AND @Date2 then odate end

是否存在其他区别,在上述情况下,如果条件不满足,xdate值将填充NULL,即使我没有写ELSE NULL

3 个答案:

答案 0 :(得分:7)

它没有任何语义差异ELSE NULL如果省略则是默认值。

对于潜在的读者来说,可能明确地包括多余的ELSE可能会更清楚,但不知道这个事实。

答案 1 :(得分:2)

来自CASE上的MSDN文档:

  

ELSE else_result_expression

     

如果没有比较操作的计算结果为TRUE,则返回表达式。如果省略此参数且没有比较操作计算为TRUE,则CASE返回NULL。


另一方面,将日期文字写成:

是一个更好的习惯
DECLARE @DATE1 DATETIME 
SET @DATE1 = '20111231'

因为这些文字(YYYYMMDD,没有分隔符)不明确 - 您可以忽略有效的DATEFORMAT设置。

答案 2 :(得分:1)

是的,他们愿意。

例如,如果您有值

create table tablx (xdate datetime, odate datetime)

insert into tablx values ('2012-01-01', '2012-01-02')
insert into tablx values (null,         '2012-01-02')
insert into tablx values (null,         '2013-11-12')
insert into tablx values ('2013-11-11', '2013-11-12')

第一行,第三行和第四行将更新为null,第二行将更新为“2012-01-02”,因此实际上

case WHEN <something> then odate end

相当于

case WHEN <something> then odate else null end

但我更喜欢第二个版本,因为它更明确,更明显。