SQL Server 2008の2つの日付の時間(10進型)の差を計算する必要があります。
MSDNで 'CONVERT'を使用してdatetimeを10進数に変換する便利なテクニックが見つかりませんでした。
誰でも私を助けてくれますか?
更新:
明確にするために、小数部も必要です(したがって10進数型)。したがって、9:00から10:30に1.5が返されます。
DATEDIFF(hour, start_date, end_date)
は、start_date
とend_date
の間の時間境界の数を示します。
小数時間数が必要な場合は、DATEDIFF
をより高い解像度で使用し、結果を除算できます。
DATEDIFF(second, start_date, end_date) / 3600.0
DATEDIFF
のドキュメントは、MSDNで入手できます。
http://msdn.Microsoft.com/en-us/library/ms189794%28SQL.105%29.aspx
2つの日時値を減算して24を掛けるだけです。
Select Cast((@DateTime2 - @DateTime1) as Float) * 24.0
テストスクリプトは次のようになります。
Declare @Dt1 dateTime Set @Dt1 = '12 Jan 2009 11:34:12'
Declare @Dt2 dateTime Set @Dt2 = getdate()
Select Cast((@Dt2 - @Dt1) as Float) * 24.0
これは、すべての日時が整数のペアとして内部的に保存され、最初の整数が1900年1月1日からの日数であり、2番目の整数(時刻を表す)が(の数であるため、 1)ticks真夜中から。 (SmallDatetimesの場合、時間部分の整数は真夜中からの分数です)。値に対して実行される算術演算では、時間部分が1日の端数として使用されます。 6am = 0.25、正午= 0.5など。詳細については、 MSDNリンクはこちら を参照してください。
したがって、Cast((@ Dt2-@ Dt1)as Float)は、2つの日付時刻間の合計日数を提供します。 24を掛けて時間に変換します。合計分が必要な場合は、24分ではなく1日あたりの分数(24 * 60 = 1440).
注1:これはdotNetまたはjavaScriptティックとは異なります-このティックは約3.33ミリ秒です。
DATEDIFFは整数を返しますので、時間の小数部が必要な場合は次のようなものを使用してください。
CAST(DATEDIFF(ss, startDate, endDate) AS decimal(precision, scale)) / 3600
Postgresを使用すると、DATEDIFFで問題が発生しましたが、これで成功しました。
DATE_PART('day',(delivery_time)::timestamp - (placed_time)::timestamp) * 24 +
DATE_PART('hour',(delivery_time)::timestamp - (placed_time)::timestamp) +
DATE_PART('minute',(delivery_time)::timestamp - (placed_time)::timestamp) / 60
「14.3」のような出力が得られました
Declare @date1 datetime
Declare @date2 datetime
Set @date1 = '11/20/2009 11:00:00 AM'
Set @date2 = '11/20/2009 12:00:00 PM'
Select Cast(DateDiff(hh, @date1, @date2) as decimal(3,2)) as HoursApart
結果= 1.00
おそらく DATEDIFF 関数を探しているでしょう。
DATEDIFF(datepart、startdate、enddate)
コーディングする場所は次のようになります。
DATEDIFF(hh、startdate、enddate)
DATEDIFF(minute,startdate,enddate)/60.0)
または、これを小数点以下2桁で使用します。
CAST(DATEDIFF(minute,startdate,enddate)/60.0 as decimal(18,2))