MSSQL与UNIX时间戳

MSSQL中UNIX时间的转换问题 –有的时候需要用到UNIX时间,该时间是指从’1970-01-01
00:00:00‘到当前的时间的秒数,在UNIX里这个叫时间戳,为了不和MSSQL的时间戳冲突(MSSQL的时间戳实际上是一个计数器)。这里就叫
UNIX时间。另外下面的表达式也给出了精确到毫秒级单位的unix时间转换表达式

DECLARE @unixtime bigint

DECLARE @adate datetime

–下面的表达式的功能是将datetime类型的当前时间转换成从’1970-01-01 00:00:00‘到当前的时间的秒数
SET @unixtime = CONVERT(bigint,DATEDIFF(mi,’1970-01-01 00:00:00′, GETDATE())) * 60 + DATEPART(ss,GETDATE())

–下面的表达式的功能是将从’1970-01-01 00:00:00‘到当前的时间的秒数转换成datetime类型
SET @adate = DATEADD (ss ,@unixtime % 60 ,DATEADD(mi,@unixtime / 60,’1970-01-01 00:00:00′))

SELECT @unxitime,@adate   

个人认为:select dateadd(ss,number,’1970-1-1 00:00:00′) 不更好吗,

**********************************************

–下面的表达式的功能是将datetime类型的当前时间转换成从’1970-01-01 00:00:00‘到当前的时间的毫秒数
SET @unixtime = CONVERT(bigint,DATEDIFF(mi,’1970-01-01 00:00:00.000′,
GETDATE())) * 60000 + DATEPART(s,GETDATE()) * 1000 + DATEPART(ms,
GETDATE())

–下面的表达式的功能是将从’1970-01-01 00:00:00‘到当前的时间的毫秒数转换成datetime类型
SET @adate = DATEADD (ms ,@unixtime % 60000 ,DATEADD(mi,@unixtime / 60000,’1970-01-01 00:00:00.000′))

SELECT @unxitime,@adate

++++++++++++++++++++++++++++++++++++++++++++++

发布日期:
分类:Mysql

发表评论

邮箱地址不会被公开。 必填项已用*标注