bigint
日付と時刻の情報 ( 、 など) を含むタイプ1353056515
の列1353067040
があります。1360839600
私の要件は、上記の列と現在の日時の間の時間差を HOURS 形式で取得することです。
私は解決策を見つけようとしましたが、それらはとても混乱していました。私は SQL Server を初めて使用します。
助けてください。
bigint
日付と時刻の情報 ( 、 など) を含むタイプ1353056515
の列1353067040
があります。1360839600
私の要件は、上記の列と現在の日時の間の時間差を HOURS 形式で取得することです。
私は解決策を見つけようとしましたが、それらはとても混乱していました。私は SQL Server を初めて使用します。
助けてください。
これを試してください。
declare @mydate datetime
DECLARE @LocalTimeOffset BIGINT
,@AdjustedLocalDatetime BIGINT
SET @LocalTimeOffset = DATEDIFF(second,GETDATE(),GETUTCDATE())
SET @AdjustedLocalDatetime = 1416474000 - @LocalTimeOffset
SELECT DATEADD(second,@AdjustedLocalDatetime, CAST('1970-01-01 00:00:00' AS datetime))
-- It will give you date 2014-11-20 14:30:00.000
データ差分操作:
select DATEDIFF(hour,@mydate,GETDATE())
また
関数の作成
create FUNCTION dbo.fn_ConvertToDateTime (@Datetime BIGINT)
RETURNS DATETIME
AS
BEGIN
DECLARE @mydate datetime
DECLARE @LocalTimeOffset BIGINT
,@AdjustedLocalDatetime BIGINT
SET @LocalTimeOffset = DATEDIFF(second,GETDATE(),GETUTCDATE())
SET @AdjustedLocalDatetime = @Datetime - @LocalTimeOffset
SELECT @mydate=DATEADD(second,@AdjustedLocalDatetime, CAST('1970-01-01 00:00:00' AS datetime))
return @mydate
END;
GO
select mydate= dbo.fn_ConvertToDateTime (1416474000)
select DATEDIFF(hour,@mydate,GETDATE())
それが役立つことを願っています。
この数値は UNIX タイムスタンプのように見えます。これは、1970 年 1 月 1 日 00:00:00 UTC からの秒数です。datetime
単純な DATEDIFF を使用して UNIX タイムスタンプを取得できます。
declare @date datetime='2014-11-20T10:00:00'
declare @epoch datetime='19700101'
select DATEDIFF(s,@epoch,@date)
2 つのタイムスタンプ間の時間数を取得するには、差を 3600 (1 時間の秒数) で割るだけです。差を計算する前に、タイムスタンプを日付に変換する必要はありません。
declare @dateTS int=DATEDIFF(s,@epoch,@date)
declare @nowTS int=DATEDIFF(s,@epoch,GETUTCDATE())
select (@nowTS-@dateTS)/3600.0
3600.0
以前は 10 進数の結果を取得していたことに注意してください。を使用する3600
と、小数部分が切り捨てられ、0
差が 1 時間未満になります。時間全体を返したい場合は、これで問題ありません。
クエリでは、次のように記述できます。
select (DATEDIFF(s,@epoch,GETUTCDATE())-[MY_TS_COLUMN])/3600.0 AS Hours
from [MY_TABLE]