私はsmalldatetime
という値をクエリで "今日の午後9時"にしようとしています。私は今日のSQLの時刻を午後9時に作成する方法
DATEADD(HOUR, 21, CONVERT(date, GETDATE()))
を使用することができると思ったが、SQL Serverのはそれを好きではない - 私は
日付要素の使用時間をデータ 型の日付の日付関数DATEADDによってサポートされていないエラーが発生します。
回避策を提案しますか?
私はsmalldatetime
という値をクエリで "今日の午後9時"にしようとしています。私は今日のSQLの時刻を午後9時に作成する方法
DATEADD(HOUR, 21, CONVERT(date, GETDATE()))
を使用することができると思ったが、SQL Serverのはそれを好きではない - 私は
日付要素の使用時間をデータ 型の日付の日付関数DATEADDによってサポートされていないエラーが発生します。
回避策を提案しますか?
かなり簡単、ちょうどdate
にキャストした後にdate
に戻ってdatetime
にキャストします。
したがって、あなたはcurrent_date 00:00:00
を得るでしょうし、その後21時間を追加します。
select dateadd(hh, 21, cast(cast(getdate() as date) as datetime))
DATEADDは、3番目のパラメータは、日時の種類、ない日である必要がありますので、それはあります。
SELECT DATEADD(HOUR, 21, CONVERT(datetime,CONVERT(date, GETDATE())))
ちょうど今日の日付
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))
はい、 'cast'は時間を削除するためにここでは動作しません。あなたは' dateadd'、 'datediff'でそれを行う必要があります。 –
これを21/24.0に変更する必要があります。しかし、これは本当に混乱するコードであり、私はdatetimeデータ型に追加を使用することの大きなファンではありません。 dateaddを使ってはるかに明確です。 –
ああ、私は午後を見ていない、私はそれを午後9時にするために答えを編集した。はい、これは実際には 'dateadd()'を使用するのと同じですが、私はあなたが内部を理解していないかどうか分かりません。私は 'dateadd()'の単純な追加を置き換えるため、 'dateAdd()'の2番目の引数は何時でも複雑な式でなければなりません。その式は 'dateAdd()'の内部に埋め込まれているほど複雑であるため、単純な加算よりもあまり明確ではありません。 –
ため
dateadd
を使用して、など、その日の正午、か、比較のために取得します。 :) – Conrad