列の日時文字列値をより標準化された形式に変換する必要がある状況があります。変換プロセスは静かな手動であり、キャストして保存するだけではありません。
そのため、スクリプトは値を取得して手探りし、同じセルに ODBC 形式で格納します。問題は、セルに格納されている値が既に変換されているかどうか、またはスクリプトを再実行可能にする必要があるため、まだ処理する必要があるかどうかを確認できる必要があるということです。
したがって、私が持っている状況の例は、次の 2 つの値に出くわしたことです。
08/03/2017 3:51 PM
28/03/2017 7:30 AM
今、私はそれが初日であることを知っています。
私が使用する場合
TRY_CONVERT(DATETIME, [Value], 121)
結果の値を取得します。
2017-08-03 15:51:00.000
NULL
今、私は両方のためにNULLを取得したいので、2番目の値では正しいですが、最初の値ではなく、さらに悪いことに、最初の値の日と月のコンポーネントを交換しました。
しかし、私が使用する場合
TRY_CONVERT(DATETIME2, [Value], 121)
私は両方のメモで NULL を取得します。私の質問は、DATETIME と DATETIME2 での変換の違いは何ですか? DATETIME2 が最初に NULL を返すのはなぜですか?
最初のコンポーネントが 12 より大きいため、2 番目の値に対して NULL を返していることがわかっています。
サイドノート:
スクリプトの最後に、値の ODBC フォームが表示されます (おそらく ISO である必要がありますか?)
2016-06-07 03:23:17.000
2016-06-07 03:23:17.000
私が走るとき
TRY_CONVERT(DATETIME2, [Value], 121)
私は喜んでNULL値を取得しないので、それを変換する必要はありません:)