日時の時間だけを特定の値に設定する必要があります。希望の値に差を追加したり、元の日付のパーツを使用して新しい日時を作成したりできることはわかっていますが、よりクリーンな方法はありませんか?何かのようなもの:
declare @d datetime = '09/08/2012 09:14:55'
set @d = SETDATEPARTORSOMETHINGLIKETHAT (hour, @d, 23)
どうもありがとう。
日時の時間だけを特定の値に設定する必要があります。希望の値に差を追加したり、元の日付のパーツを使用して新しい日時を作成したりできることはわかっていますが、よりクリーンな方法はありませんか?何かのようなもの:
declare @d datetime = '09/08/2012 09:14:55'
set @d = SETDATEPARTORSOMETHINGLIKETHAT (hour, @d, 23)
どうもありがとう。
DECLARE @TargetHour TINYINT = 23;
DECLARE @d datetime = '09/08/2012 09:14:55';
SET @d = DATEADD(HOUR, @TargetHour - DATEPART(HOUR, @d), @d);
SELECT @d;
結果:
2012-09-08 23:14:55.000
(はい、これは@TargetHourが現在の時間よりも小さい場合(たとえば5または7)に機能します。)
m / d / yのようなあいまいでエラーが発生しやすい形式の使用については、非常に注意が必要です。適切な例:9月8日と8月9日のどちらを意味するのかさえわかりません。また、SQL Serverもそれを理解するために地域設定などを使用する必要があり、コードを設定が異なる人は、エラーを生成するか、さらに悪いことに、間違った日付を黙って受け入れます。次を使用する必要があります。
DECLARE @d datetime = '2012-09-08T09:14:55';