首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL Server中的UNIX_TIMESTAMP

SQL Server中的UNIX_TIMESTAMP
EN

Stack Overflow用户
提问于 2012-01-12 23:04:47
回答 9查看 84.5K关注 0票数 31

我需要在SQL Server2008中创建一个模拟mysql的UNIX_TIMESTAMP()的函数。

提前感谢!

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2016-01-13 19:40:56

如果你不关心1970年之前的日期,或者毫秒精度,那就这么做吧:

代码语言:javascript
复制
-- SQL Server
SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField)

几乎和MySQL的内置函数一样简单:

代码语言:javascript
复制
-- MySQL
SELECT UNIX_TIMESTAMP(DateField);

其他语言(Oracle、PostgreSQL等):How to get the current epoch time in ...

如果需要毫秒精度(SQL Server 2016/13.x及更高版本):

代码语言:javascript
复制
SELECT DATEDIFF_BIG(ms, '1970-01-01 00:00:00', DateField)
票数 39
EN

Stack Overflow用户

发布于 2012-01-12 23:07:52

试试这个帖子:https://web.archive.org/web/20141216081938/http://skinn3r.wordpress.com/2009/01/26/t-sql-datetime-to-unix-timestamp/

代码语言:javascript
复制
CREATE FUNCTION UNIX_TIMESTAMP (
@ctimestamp datetime
)
RETURNS integer
AS 
BEGIN
  /* Function body */
  declare @return integer

  SELECT @return = DATEDIFF(SECOND,{d '1970-01-01'}, @ctimestamp)

  return @return
END

或者这篇文章:

http://mysql.databases.aspfaq.com/how-do-i-convert-a-sql-server-datetime-value-to-a-unix-timestamp.html

代码如下:

代码语言:javascript
复制
CREATE FUNCTION dbo.DTtoUnixTS 
( 
    @dt DATETIME 
) 
RETURNS BIGINT 
AS 
BEGIN 
    DECLARE @diff BIGINT 
    IF @dt >= '20380119' 
    BEGIN 
        SET @diff = CONVERT(BIGINT, DATEDIFF(S, '19700101', '20380119')) 
            + CONVERT(BIGINT, DATEDIFF(S, '20380119', @dt)) 
    END 
    ELSE 
        SET @diff = DATEDIFF(S, '19700101', @dt) 
    RETURN @diff 
END

示例用法:

代码语言:javascript
复制
SELECT dbo.DTtoUnixTS(GETDATE()) 
-- or 
SELECT UnixTimestamp = dbo.DTtoUnixTS(someColumn) 
    FROM someTable
票数 24
EN

Stack Overflow用户

发布于 2019-04-03 04:36:28

Sql Server2016及更高版本有一个DATEDIFF_BIG函数,可用于获取毫秒数。

代码语言:javascript
复制
SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', GETUTCDATE())

创建函数

代码语言:javascript
复制
CREATE FUNCTION UNIX_TIMESTAMP()
    RETURNS BIGINT
AS
BEGIN
    RETURN DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', GETUTCDATE())
END

并执行它

代码语言:javascript
复制
SELECT dbo.UNIX_TIMESTAMP()
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8837225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档