SQL Server中的UNIX_TIMESTAMP

The*_*ver 21 sql-server-2008

我需要在SQL Server 2008中创建一个模仿mysql的函数UNIX_TIMESTAMP().

提前致谢 !

Dun*_*unc 27

如果您对1970年之前的日期或毫秒级精度没有打扰,那么只需:

-- SQL Server
SELECT DATEDIFF(s, '1970-01-01 00:00:00', DateField)
Run Code Online (Sandbox Code Playgroud)

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

-- MySQL
SELECT UNIX_TIMESTAMP(DateField);
Run Code Online (Sandbox Code Playgroud)

其他语言(Oracle,PostgreSQL等):如何获取当前的纪元时间(Unix时间戳)

  • 效果很好,但是哇,微软来了-仅创建适当的unix时间戳功能有多难! (2认同)

rko*_*egi 19

试试这篇文章:http: //skinn3r.wordpress.com/2009/01/26/t-sql-datetime-to-unix-timestamp/

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
Run Code Online (Sandbox Code Playgroud)

或者这篇文章:

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

代码如下:

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
Run Code Online (Sandbox Code Playgroud)

样品用法:

SELECT dbo.DTtoUnixTS(GETDATE()) 
-- or 
SELECT UnixTimestamp = dbo.DTtoUnixTS(someColumn) 
    FROM someTable
Run Code Online (Sandbox Code Playgroud)

  • 请注意,unix 时间戳计算自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数!这意味着,如果您的 SQL 服务器在本地时间运行,您可能无法使用此方法获得正确的 unix 时间戳。 (2认同)

Ran*_*ton 6

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

SELECT DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', GETUTCDATE())
Run Code Online (Sandbox Code Playgroud)

创建函数

CREATE FUNCTION UNIX_TIMESTAMP()
    RETURNS BIGINT
AS
BEGIN
    RETURN DATEDIFF_BIG(millisecond, '1970-01-01 00:00:00', GETUTCDATE())
END
Run Code Online (Sandbox Code Playgroud)

并执行它

SELECT dbo.UNIX_TIMESTAMP()
Run Code Online (Sandbox Code Playgroud)