SQL Server で UNIX タイムスタンプ (bigint) を DateTime に変換するにはどうすればよいですか?
370183 次
17 に答える
61
試す:
CREATE FUNCTION dbo.fn_ConvertToDateTime (@Datetime BIGINT)
RETURNS DATETIME
AS
BEGIN
DECLARE @LocalTimeOffset BIGINT
,@AdjustedLocalDatetime BIGINT;
SET @LocalTimeOffset = DATEDIFF(second,GETDATE(),GETUTCDATE())
SET @AdjustedLocalDatetime = @Datetime - @LocalTimeOffset
RETURN (SELECT DATEADD(second,@AdjustedLocalDatetime, CAST('1970-01-01 00:00:00' AS datetime)))
END;
GO
于 2010-05-25T11:57:14.330 に答える
30
このような
Unix (エポック) 日時をベース日付に秒単位で追加します
これで今のところ取得できます (2010-05-25 07:56:23.000)
SELECT dateadd(s,1274756183,'19700101 05:00:00:000')
逆に行きたい場合は、これを見てください http://wiki.lessthandot.com/index.php/Epoch_Date
于 2010-05-25T11:57:01.360 に答える
13
これをテストします。
SQLサーバー:
SELECT dateadd(S, timestamp, '1970-01-01 00:00:00')
FROM
your_table
MySql サーバー:
SELECT
from_unixtime(timestamp)
FROM
your_table
http://www.w3resource.com/mysql/date-and-time-functions/mysql-from_unixtime-function.php
于 2016-12-22T14:46:18.183 に答える
8
これはそれを行います:
declare @UNIX_TIME int
select @UNIX_TIME = 1111111111
-- Using dateadd to add seconds to 1970-01-01
select [Datetime from UNIX Time] = dateadd(!precision!,@UNIX_TIME,'1970-01-01')
!precision! の代わりに タイムスタンプの精度に応じて、ss、ms、または mcs を使用します。Bigint は、マイクロ秒の精度を保持できます。
于 2010-05-25T11:58:12.143 に答える
1
より良い?この関数は、ミリ秒単位のunixtimeをdatetimeに変換します。ミリ秒が失われますが、それでもフィルタリングには非常に役立ちます。
CREATE FUNCTION [dbo].[UnixTimestampToGMTDatetime]
(@UnixTimestamp bigint)
RETURNS datetime
AS
BEGIN
DECLARE @GMTDatetime datetime
select @GMTDatetime =
CASE
WHEN dateadd(ss, @UnixTimestamp/1000, '1970-01-01')
BETWEEN
Convert(DATETIME, Convert(VARCHAR(4), Year(dateadd(ss, @UnixTimestamp/1000, '1970-01-01') )) + '-03-' + Convert(VARCHAR(2), (31 - (5 * Year(dateadd(ss, @UnixTimestamp/1000, '1970-01-01') )/4 + 4) % 7)) + ' 01:00:00', 20)
AND
Convert(DATETIME, Convert(VARCHAR(4), Year(dateadd(ss, @UnixTimestamp/1000, '1970-01-01') )) + '-10-' + Convert(VARCHAR(2), (31 - (5 * Year(dateadd(ss, @UnixTimestamp/1000, '1970-01-01') )/4 + 1) % 7)) + ' 02:00:00', 20)
THEN Dateadd(hh, 1, dateadd(ss, @UnixTimestamp/1000, '1970-01-01'))
ELSE Dateadd(hh, 0, dateadd(ss, @UnixTimestamp/1000, '1970-01-01'))
END
RETURN @GMTDatetime
END
于 2013-02-19T16:31:43.987 に答える