0

次のコードが機能する理由:

CAST(DateOfAction AS Date)

しかし、このコードはしません:

CAST(DateOfAction AS Datetime)

注:DateOfActionvarcharフィールドです

誰かがこれを説明して正しいコードを与えることができますか?

4

4 に答える 4

0

Dateは、datetimeで問題を引き起こした一部の値の「修正済み」動作を持っています。

たとえば、yyyy-mm-ddは、ISOであっても、言語に対して安全ではありません。

TiborKarasziによるこの記事を参照してください。そして、このSOの質問(コメント内)

于 2011-01-14T05:24:58.007 に答える
0

date には datetime ではなく安全な特定の変換があることを指摘する他の回答に加えて、日付の範囲が datetime の範囲よりも大きいという事実もあります。そのため、1753 年より前の日付の場合、書式設定/変換は機能しません。


また、これがコードを古いサーバーで動作するように変換するためではなく、単に時間コンポーネントを取得するためのものである場合date、サーバーで利用できる場合は、 を使用する必要がdatetime2あります。これにより、はるかにうまく機能します。

于 2011-01-14T13:19:11.817 に答える
0

おそらく、VARCHARフィールドにDATE(時間値ではなく) に変換される可能性のある値が含まれていますが、SQL Server CAST および CONVERT がサポートする有効なサポートされている形式のいずれでもないためです。

データがどのように見えるかのサンプルを提供していないため、推測することしかできません....

に変換される、サポートされているすべての有効な形式については、CAST および CONVERTに関する SQL Server Books Online を確認してくださいDATETIME

于 2011-01-13T16:29:05.597 に答える
0

編集

フォーマットを使用しているという追加情報に従う 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'
于 2011-01-13T16:29:51.910 に答える