在下面的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
?
答案 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
但我更喜欢第二个版本,因为它更明确,更明显。