MW211 EXIT

devlog
MSSQL/キャストの順番とNULL
2015年07月03日
date型の[日付]という列を、文字型(varchar(16))に型変換する時に
NULLが混じっていたら空文字('')にするというSQL文
ISNULL()とCONVERT()を駆使する訳だが、順番を間違えると以下の違いが出てしまう
┌──────────────────────────────────────┐
│SELECT ISNULL(CONVERT(varchar(16), [日付]), '') FROM 表;              →NULL│
├──────────────────────────────────────┤
│SELECT CONVERT(varchar(16), ISNULL([日付], '')) FROM 表;        →1900-01-01│
└──────────────────────────────────────┘

これはdate型に空文字('')を入れると、初期値(1900-01-01)になるからだ
┌──────────────────────────────────────┐
│SELECT ISNULL([日付], '') FROM 表;                              →1900-01-01│
└──────────────────────────────────────┘

一番単純な例は以下(空文字('')をdate型に型変換するとやはり初期値になる)
┌──────────────────────────────────────┐
│SELECT CONVERT(date, '');                                       →1900-01-01│
└──────────────────────────────────────┘

なので、順番を間違えないように気をつけなければならない
分類:MSSQL