1. ホーム
  2. sql

[解決済み] DateフィールドがNULLのとき、SQLクエリが空の文字列ではなく「01/01/1900」を返すのはなぜですか?重複

2022-02-09 03:56:54

質問

SQLクエリの戻り値をテストしています。

選択中のテーブルには、値 NULL の中に CloseDate フィールドを使用します。 であるかどうかをチェックするロジックを持っています。 NULL の場合、空文字列を返します。しかし、それは 01/01/1900

declare @value varchar(50) = '2346677888'
    Set @Value=@Value +'%'

    select CONVERT(varchar,ISNULL(m.CloseDate,''),101) as CloseDate from( 
    SELECT m.EdsClosedDate AS CloseDate
    FROM [dbo].[tblMyTable] m                   
    WHERE MID like @value) m

クエリに問題があるのでしょうか?

解決方法は?

この式は

select CONVERT(varchar, ISNULL(m.CloseDate, ''), 101) as CloseDate

は、より明確にこう書かれています。

select CONVERT(varchar(255), COALESCE(m.CloseDate, 0), 101) as CloseDate

つまり、空の文字列は日付の値 "0" と同じです。 SQL Serverは1900-01-01から日付を数え始めるので、結果にそのように表示されるのです。

何を期待しているのかよくわからないのですが。 もし空の文字列が必要なら、その文字列を の後に 値を文字列に変換します。

select COALESCE(CONVERT(varchar(255), m.CloseDate, 101), '') as CloseDate