如何在 MS SQL 存储函数中将日期时间转换为时间戳

Mik*_*rov 6 sql-server datetime stored-procedures

有一个从表更新触发器调用的存储函数。像这样:

FUNCTION [dbo].[DateTime2ToBigInt](@dt DATETIME2(7))
RETURNS BIGINT
Run Code Online (Sandbox Code Playgroud)

需要将输入日期时间转换为 unix 时间戳。

尝试过CONVERT( timestamp, @dt)CAST(@dt AS TIMESTAMP)但都导致

“不允许从数据类型 datetime2 到时间戳的显式转换。”

当然可以用数学来做,但我不敢相信,mssql 没有直接转换功能

小智 7

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)

试试这个功能:

SELECT UNIX_TIMESTAMP(GETDATE());
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,您应该使用 GETUTCDATE() 来获取正确的 unix 时间戳。否则,您的 unix 时间戳将基于时区。 (3认同)