SQL Server Isnullがフィールドがnullのときに1900-01-01を返す


14

DOBフィールドがnullの場合、次のコードは1900-01-01を返します。空の文字列( '')を返すことを望んでいました(期待していました)が、そうではありません。希望する結果を得るにはどうすればいいですか?

isnull(convert(date,DOB,1),'')

5
データ型を混同しすぎています。基本的にあなたがNULLデートSELECT CAST('' AS DATE)でしていることは言っています。どのデータ型DOBですか?
マークシンキンソン

1
それは私が今までに変換していますことをvarcharデータ型です
フアン・ベレス

5
これは古い投稿であることは知っていますが、アプリケーションレイヤーにデータをフォーマットさせるのではなく、SQLでデータをフォーマットしようとしているように見えることに言及する価値があります。99.9%の時間で、アプリケーション層にフォー​​マットを行わせたほうがよいでしょう。
エリック

回答:


19

DATEから値の型を返すため、空の文字列を取得できませんISNULL

MSDNごとに、ISNULL

check_expressionと同じ型を返します。check_expressionとしてリテラルNULLが指定されている場合、replacement_valueのデータ型を返します。check_expressionとしてリテラルNULLが提供され、replacement_valueが提供されない場合、intを返します。

値がNULLであるかどうかを確認している場合、日付の値を返す必要がある場合を除き、日付に変換する必要はありません(これは思われません)。

代わりに、次を使用します。

SELECT ISNULL( DOB , '')

どちらが戻ります

''

値がの場合NULL

NULL日付はありませんNULL(値なし)。一方、空の文字列はに評価さ0れます。これは、SQL Serverでは暗黙的にからの日数を表す整数1900-01-01です。


-3

DOBが読み込まれたときにDOBの値を返し、DOBが読み込まれなかったときにnull値を削除する場合。これを試すことができますが、DOBは日付型ではなく、varcharになります。

isnull(cast(cast(DOB as date)as varchar),'') as DOB   (SQL SERVER)

2
a VARCHARをaにキャストし、a DATEに戻すことはVARCHAR意味がありません。そのナンセンスを削除すると、あなたの答えは受け入れられた答えと同じで、説明は少なくなります。
エリック

はい、あなたのシナリオでは意味がありませんが、私がそれを使用したシナリオでは、で開始し、datetime日付のみが必要でしたYYYY-MM-DD。だからdate時間を落としてキャストすることで。次に、キャストするvarcharことでisnull関数を使用できます。そのため、私はまだデータが取り込まれた日付を取得し、null値を削除します。そうでなければ、私は得ていた1900-01-01 00:00:00.000
エルビスカンデラリア

1
私のシナリオではなく、質問のシナリオです。それがあなたが下票を集めている理由だと思います。実際には、別の質問に答えようとしています。
エリック

はい、あなたは正しいです。間違って読んだ。私のせい。
エルビスカンデラリア

-3

これにより、NULL日付がスペースに変換されます。アプリケーション層(Excel)はスペースを細かく処理します

ISNULL (CONVERT(varchar(50), w.TRANSACTIONDT, 120), '')  as wTRANSACTIONDT

-3

ビューを作成するだけです

year(DOB)<= 1900の場合、CREATE VIEW test_view
AS
SELECTケース、そうでない場合はDOBはテストからDOB、sometext、idとして終了します。

元のテーブルの代わりにそれを使用します:test_viewから*を選択します


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.