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

上記の場合、elseの存在は違いを生みますNULLELSE 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'

DATEFORMATこのようなリテラル(YYYYMMDD、区切り文字なし)はあいまいではないため、有効な設定を無視できます。

于 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')

1行目、3行目、4行目はnullに更新され、2行目は「2012-01-02」に更新されるため、事実上

case WHEN <something> then odate end

と同等です

case WHEN <something> then odate else null end

しかし、私は2番目のバージョンを好みます。それは、より明確で明白だからです。

于 2012-12-28T13:36:48.110 に答える