2016-10-12 16 views
0

私はsmalldatetimeという値をクエリで "今日の午後9時"にしようとしています。私は今日のSQLの時刻を午後9時に作成する方法

DATEADD(HOUR, 21, CONVERT(date, GETDATE())) 

を使用することができると思ったが、SQL Serverのはそれを好きではない - 私は

日付要素の使用時間をデータ 型の日付の日付関数DATEADDによってサポートされていないエラーが発生します。

回避策を提案しますか?

答えて

5

かなり簡単、ちょうどdateにキャストした後にdateに戻ってdatetimeにキャストします。

したがって、あなたはcurrent_date 00:00:00を得るでしょうし、その後21時間を追加します。

select dateadd(hh, 21, cast(cast(getdate() as date) as datetime)) 
+0

ためdateaddを使用して、など、その日の正午、

か、比較のために取得します。 :) – Conrad

2

DATEADDは、3番目のパラメータは、日時の種類、ない日である必要がありますので、それはあります。

SELECT DATEADD(HOUR, 21, CONVERT(datetime,CONVERT(date, GETDATE()))) 
0

ちょうど今日の日付

Select dateadd(day, datediff(day, 1, getDate()), 1) + (21/24.0) 

最初の部分、dateadd(day, datediff(day, 1, getDate()), 1)に21/24.0を追加し、

第二の部分、+ (21/24.0)、GETDATE()から時間を取り除き、に等しい日の小数部を追加9 am

これは内部的に、SQL Serverは日付時刻(1900年1月1日以降の日数)、と整数の部分が日付の整数である小数点の値に結合され、小数部は1日の小数部であるため、時刻の2番目の整数(深夜からのticksの数)が含まれます。日付は、私は疑問で入力した後、ええ、私はこの1分考え時間、

Select dateadd(hour, 21, dateadd(day, datediff(day, 1, getDate()), 1)) 
+0

はい、 'cast'は時間を削除するためにここでは動作しません。あなたは' dateadd'、 'datediff'でそれを行う必要があります。 –

+0

これを21/24.0に変更する必要があります。しかし、これは本当に混乱するコードであり、私はdatetimeデータ型に追加を使用することの大きなファンではありません。 dateaddを使ってはるかに明確です。 –

+0

ああ、私は午後を見ていない、私はそれを午後9時にするために答えを編集した。はい、これは実際には 'dateadd()'を使用するのと同じですが、私はあなたが内部を理解していないかどうか分かりません。私は 'dateadd()'の単純な追加を置き換えるため、 'dateAdd()'の2番目の引数は何時でも複雑な式でなければなりません。その式は 'dateAdd()'の内部に埋め込まれているほど複雑であるため、単純な加算よりもあまり明確ではありません。 –

関連する問題