2017-05-12 20 views
-1

日付からテキストを削除してDATETIMEに変換しなければならないシーンがあります。しかし、以下の方法を使用すると、NULL出力が発生します。置換と変換がSQL ServerのNULLに変換されています

SELECT CAST(REPLACE('2017-09-21','',NULL) AS DATETIME) 

CONVERTを使用すると同じ出力が表示されます。なぜこうなった?

+0

あなたは何をしようとしていますか?空の文字列をNULLに置き換えますか? IEは何もUnknownと置き換えませんか? –

+0

削除しようとしているテキストは何ですか?空白を削除しようとしている場合は、REPLACE( '2017-09-21'、 ''、 '')に切り替えます。それは余分なスペースを取り除くでしょう。 –

答えて

2

それはdocumentedです:

戻り値NULLの引数のいずれかの 1がNULLである場合。

最後の引数としてNULLを渡します。

かわりREPLACENULLIFを使用することができます。

SELECT CAST(NULLIF('20170921', '') AS DATETIME) 

文字列が空で、それ以外のdatetimeキャスト場合、これはNULLを返します。

1

はNULLを指定します。 SQL(すべての製品)ではNULLはUNKNOWNを意味します。未知の値に関数を適用すると、結果が不明になり、NULLになります。例外は、特にNULLを処理するための関数です。

空の文字列をNULLに置き換えようとすると、式を固定する方法がわかりにくいです。一致するはずの空の文字列は何ですか?

+0

空の文字列を 'NULL'で置き換え、空でない文字列を有効な' datetime'で置き換えたいと思います。私の提案は 'NULLIF'を使用することです。 –