次のコードが機能する理由:
CAST(DateOfAction AS Date)
しかし、このコードはしません:
CAST(DateOfAction AS Datetime)
注:DateOfAction
はvarchar
フィールドです
誰かがこれを説明して正しいコードを与えることができますか?
次のコードが機能する理由:
CAST(DateOfAction AS Date)
しかし、このコードはしません:
CAST(DateOfAction AS Datetime)
注:DateOfAction
はvarchar
フィールドです
誰かがこれを説明して正しいコードを与えることができますか?
Dateは、datetimeで問題を引き起こした一部の値の「修正済み」動作を持っています。
たとえば、yyyy-mm-ddは、ISOであっても、言語に対して安全ではありません。
TiborKarasziによるこの記事を参照してください。そして、このSOの質問(コメント内)
date には datetime ではなく安全な特定の変換があることを指摘する他の回答に加えて、日付の範囲が datetime の範囲よりも大きいという事実もあります。そのため、1753 年より前の日付の場合、書式設定/変換は機能しません。
また、これがコードを古いサーバーで動作するように変換するためではなく、単に時間コンポーネントを取得するためのものである場合date
、サーバーで利用できる場合は、 を使用する必要がdatetime2
あります。これにより、はるかにうまく機能します。
おそらく、VARCHAR
フィールドにDATE
(時間値ではなく) に変換される可能性のある値が含まれていますが、SQL Server CAST および CONVERT がサポートする有効なサポートされている形式のいずれでもないためです。
データがどのように見えるかのサンプルを提供していないため、推測することしかできません....
に変換される、サポートされているすべての有効な形式については、CAST および CONVERTに関する SQL Server Books Online を確認してくださいDATETIME
。
フォーマットを使用しているという追加情報に従う
yyyymmdd
と、問題はデータにあるとしか思えません。以下をお試しいただけますか?
すべての値は、あなたが考えている形式になっていますか?
SELECT DateOfAction
FROM ResAdm.Action
WHERE DateOfAction NOT LIKE '[1-2][0-9][0-9][0-9][0-1][0-9][0-3][0-9]'
範囲内のすべての値は に受け入れられdatetime
ますか?
SELECT DateOfAction
FROM ResAdm.Action
WHERE cast(DateOfAction as DATE) < '17530101'