SQL Server 2008の2つの日付間の時間差(10進型)を計算する必要があります。
MSDNで「CONVERT」を使用して日時を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
datepart
toDATEDIFF
は、出力の解像度を制御します。たとえばstart_date
、end_date
とが59秒異なる場合、DATEDIFF(MINUTE, start_date, end_date) / 60.0
0を返しますが、DATEDIFF(second, start_date, end_date) / 3600.0
0.0163888(59/3600)を返します。
DATEDIFF
1時間よりも高い解像度で使用)は機能します。たとえば、SELECT DATEDIFF(second, DATEADD(minute, -15, GETUTCDATE()), GETUTCDATE()) / 3600.0
0.250000を返します。
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)ティック数であるためです。(SmallDatetimesの場合、時間部分の整数は深夜からの分数です)。値に対して行われる算術は、時間部分を1日の端数として使用します。6am = 0.25、noon = 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)
SELECT DATEDIFF(hh、firstDate、secondDate)FROM tableName WHERE .. ..