日付からテキストを削除してDATETIMEに変換しなければならないシーンがあります。しかし、以下の方法を使用すると、NULL出力が発生します。置換と変換がSQL ServerのNULLに変換されています
SELECT CAST(REPLACE('2017-09-21','',NULL) AS DATETIME)
CONVERTを使用すると同じ出力が表示されます。なぜこうなった?
日付からテキストを削除してDATETIMEに変換しなければならないシーンがあります。しかし、以下の方法を使用すると、NULL出力が発生します。置換と変換がSQL ServerのNULLに変換されています
SELECT CAST(REPLACE('2017-09-21','',NULL) AS DATETIME)
CONVERTを使用すると同じ出力が表示されます。なぜこうなった?
それはdocumentedです:
戻り値NULLの引数のいずれかの 1がNULLである場合。
最後の引数としてNULL
を渡します。
かわりREPLACE
のNULLIF
を使用することができます。
SELECT CAST(NULLIF('20170921', '') AS DATETIME)
文字列が空で、それ以外のdatetime
キャスト場合、これはNULL
を返します。
はNULLを指定します。 SQL(すべての製品)ではNULLはUNKNOWNを意味します。未知の値に関数を適用すると、結果が不明になり、NULLになります。例外は、特にNULLを処理するための関数です。
空の文字列をNULLに置き換えようとすると、式を固定する方法がわかりにくいです。一致するはずの空の文字列は何ですか?
空の文字列を 'NULL'で置き換え、空でない文字列を有効な' datetime'で置き換えたいと思います。私の提案は 'NULLIF'を使用することです。 –
あなたは何をしようとしていますか?空の文字列をNULLに置き換えますか? IEは何もUnknownと置き換えませんか? –
削除しようとしているテキストは何ですか?空白を削除しようとしている場合は、REPLACE( '2017-09-21'、 ''、 '')に切り替えます。それは余分なスペースを取り除くでしょう。 –