MSSQL(SQL SERVER)中获取UNIX时间戳


UNIX时间戳是格林尼治时间从1970年1月1日0点0分0秒 到当前的秒数,在MySql中有个函数UNIX_TIMESTAMP可以获取,如MySql显示当前的UNIX时间戳:

SELECT UNIX_TIMESTAMP() --MySql获取当前时间戳

MySql转换函数是FROM_UNIXTIME,如:

SELECT FROM_UNIXTIME(1359803400) --其中1359803500是时间戳,输出:2013-02-02 11:10:00.000


在SQL SERVER中没有这个两个函数,但知道原理后可以用DATEDIFF函数来计算获得UNIX时间戳,DATEDIFF是用来计算两段时间间隔的函数,可以算两段时间间隔多少秒SECOND、分钟MINUTE、小时HOUR、天DAY等等。获取当前时间戳:

SELECT DATEDIFF(SECOND,'1970-01-01',GETUTCDATE()) --GETUTCDATE是sql server的获取格林尼治时间函数,用GETDATE的话,北京时间要加8小时进去

把时间戳1359803400转换成日期,用函数DATEADD做时间加减法,把秒数(时间戳)加到格林尼治时间1970-01-01 00:00:00得到秒数,再用CONVERT转换成年月日时分秒的时间120是形如yyyy-MM-dd hh:MM:ss的格式varchar(20)是要精确的时间长度:

SELECT CONVERT(VARCHAR(20),DATEADD(SECOND,1359803400+28800,'1970-01-01'),120) --北京时间要加回8*3600=28800秒



可以写成一个简单的函数,方便调用

USE DBTest --数据库
GO
/*
    xx:获取UNIX时间戳
*/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
     
CREATE FUNCTION [dbo].[UNIX_TIMESTAMP]
(
    @DATE DATETIME=''
)
       
RETURNS DECIMAL
AS
BEGIN
     
  --这里不用GETUTCDATE()而且GETDATE()为了方便处理,注意时区,北京时间统一减8变成格林尼治时间
   IF @DATE='' SET @DATE=GETDATE() 
  SET @DATE=DATEADD(HOUR,-8,GETDATE())
   RETURN DATEDIFF(SECOND,'1970-01-01',@DATE)
     
END
       
go




调用:

SELECT dbo.UNIX_TIMESTAMP('')--获取当前时间戳
SELECT dbo.UNIX_TIMESTAMP('2013-02-02 11:10')--获取当特定时间的时间戳



类别:数据库   阅读(0)   评论(0)    发表时间:2014-05-15 21:57  星期四

评论区

发表评论

        姓名:
邮箱|网站:
        内容:

  (可按Ctrl+Enter提交)