MSSQL中UNIX时间的转换问题

来源:互联网 发布:手机网站源码 php 编辑:程序博客网 时间:2024/04/30 09:36

--有的时候需要用到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

--下面的表达式的功能是将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