1

在下面的 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

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

4

3 回答 3

7

如果省略,它不会产生任何语义差异ELSE NULL是默认值。

ELSE不过,对于不知道这一事实的潜在读者来说,也许明确地包括冗余可能会更清楚。

于 2012-12-28T13:29:51.803 回答
2

从 MSDN 文档中CASE

ELSE else_result_expression

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


在旁注中,将日期文字编写为更好的习惯:

DECLARE @DATE1 DATETIME 
SET @DATE1 = '20111231'

因为这样的文字(YYYYMMDD,没有分隔符)没有歧义 - 然后您可以忽略DATEFORMAT有效的设置。

于 2012-12-28T13:30:20.767 回答
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

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

于 2012-12-28T13:36:48.110 回答