1900-01-01
に変換する方法についての投稿がたくさんあるようですNULL
が、私の問題は逆です。ストアド プロシージャの処理smalldatetime
(SQL Server 2008) がありますが、本当に のままにしたいのに に変換1900-01-01
し続けます。何かご意見は?NULL
1900-01-01
ありがとう
1900-01-01
に変換する方法についての投稿がたくさんあるようですNULL
が、私の問題は逆です。ストアド プロシージャの処理smalldatetime
(SQL Server 2008) がありますが、本当に のままにしたいのに に変換1900-01-01
し続けます。何かご意見は?NULL
1900-01-01
ありがとう
基本的に、SQL Server は区別できません。
1900-01-01 00:00:00.000
SQL Server のカレンダーのエポック(ゼロ ポイント) です。SQL Server で次のように言うと、次のようになります。
select 'empty string',convert(datetime,'')
変換アルゴリズムはエラーをスローしません。空の文字列を SQL Server の日付/時刻値に変換します... (ご想像のとおりです!) ... '1900-01-01 00.00.00.000'.
値がどうなるかnull
は、SQL Server の SET オプションの現在の設定によって異なりますSET CONCAT_NULL_YIELDS_NULL
。の場合off
、null
値は基本的に空の文字列と同じように扱われます。
ストアド プロシージャの問題に関する限り (ストアド プロシージャが日付/時刻の値1900-01-01
を... に変換するのは、ストアド プロシージャの問題です。SQL Server は、null 以外の日付/時刻の値をにnull
自動的に変換しません。明示的に行っています。1900-01-01 00.00.00.000
null
また、古いバージョンの SQL Server では、既定で null と空の文字列がほぼ同じように扱われる傾向がありました。あなたのシステムは長い間存在していたと思います。
1900-01-01 00.00.00.000
その結果、SQL Server はfrom''
とfromの実際の null 以外の日付/時刻値を区別するのに苦労する傾向があります。null
コードを表示していないので、ストアド プロシージャのどこかに次のようなコードが含まれているのではないかと疑っています。
select some_date_time_column = case when t.some_date_time_column == '' then null else t.some_date_time_column end
from some_table t