0

1900-01-01に変換する方法についての投稿がたくさんあるようですNULLが、私の問題は逆です。ストアド プロシージャの処理smalldatetime(SQL Server 2008) がありますが、本当に のままにしたいのに に変換1900-01-01し続けます。何かご意見は?NULL1900-01-01

ありがとう

4

1 に答える 1

0

基本的に、SQL Server は区別できません。

1900-01-01 00:00:00.000SQL 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。の場合offnull値は基本的に空の文字列と同じように扱われます。

ストアド プロシージャの問題に関する限り (ストアド プロシージャが日付/時刻の値1900-01-01を... に変換するのは、ストアド プロシージャの問題です。SQL Server は、null 以外の日付/時刻の値をにnull自動的に変換しません。明示的に行っています。1900-01-01 00.00.00.000null

また、古いバージョンの 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
于 2015-03-16T21:36:07.790 に答える