をsmalldatetime
にキャストしようとしています。行の日付値がsmalldatetime
の範囲外の場合は、日付をデフォルト値に設定します。許可された最大の日付とまだ私の比較を行います。キャスト()がsmalldatetimeに失敗した場合のデフォルト値
SELECT Sum(Case When Cast(shph.datetoship as smalldatetime) < @day1datetoship Then shpd.ordered Else 0 End) as TotDemandPast
FROM shipments shph
WHERE shph.pending = 1;
shph.datetoship
はインスタンス2080-01-11 00:00:00.000
、 のためであるとき、だから私はそれが@day1datetoship
に比べ2079-06-06 00:00:00.000
、その後に変更します。
これを行うにはシンプルでエレガントな方法がありますか?
更新:
よりテストの後、2つの答えはいくつかの問題を与えることを証明しました。 最後に、別のCase
ステートメントをCast
内に置くことによって問題を解決しました。
最終的なコード:
SELECT Sum(Case When Cast(Case WHEN shph.datetoship > '2079-06-06 00:00:00' THEN '2079-06-06 00:00:00' Else shph.datetoship END as smalldatetime) < @day1datetoship Then shpd.ordered Else 0 End) as TotDemandPast
FROM shipments shph
WHERE shph.pending = 1;
を照会し、あなたの比較をしますか? – David
datetimeからsmalldatetimeへのキャストに範囲外の問題はありません。私はvarcharからsmalldatetimeにキャストしていると推測しています。そして "私はそれが2079-06-06に変更されたかった"という感覚を得ていません=/ –
代わりにdatetimeに変数をキャストしてみませんか? – UnhandledExcepSean