2012-12-28 61 views
1

在下面的SQL查询我有一个选择的情况下没有别的SQL默认ELSE值

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

回答

7

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

也许包括冗余ELSE明确可能会更清楚,潜在的读者不知道这个事实虽然。

+0

我意识到它后,我搞砸了我的表,感谢上帝它是在一个选择:D – user1570048

+1

@ user1570048 - 你是否说**你不**实际上想要'ELSE NULL'语义?你可以使用'ELSE xdate'来使用列值作为默认值,但在'UPDATE'中你最好不要在'WHERE'中排除这些行 –

2

从MSDN文档上CASE

ELSE else_result_expression

是,如果比较运算结果为真表达式返回。如果省略此参数并且没有比较操作评估为TRUE,则CASE将返回NULL。


在一个侧面说明,这是一个好习惯进入以写日期文字:

DECLARE @DATE1 DATETIME 
SET @DATE1 = '20111231' 

因为这样的文字(年月日,无分隔符)不是暧昧 - 你可以忽略有效的DATEFORMAT设置。

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 

但我宁愿第二个版本,因为它是更expli很明显。