将纪元时间戳转换为没有毫秒的日期时间?

Convert epoch timestamp to datetime without milliseconds?

首先我知道有几个问题与此类似,但其中 none 实际上展示了如何在不包括毫秒的情况下显示日期时间格式。

我有以下代码:

SELECT CONVERT(
   DATETIME,
   dateadd(SS,CONVERT(INT, 1354320000), CAST('1970-01-01 00:00:00' as datetime)),
   120
)

但是,代码包括毫秒,但我需要这样的格式 yyyy-mm-dd hh:mm:ss

有人知道解决这个问题的有效方法吗?

您可以尝试使用合适的数据类型。如 documentation 中所述,DATEADD() 的 return 值数据类型是动态的,它取决于为 date 参数提供的参数。

SELECT DATEADD(
   second, 
   CONVERT(int, 1354320201), 
   CAST('1970-01-01T00:00:00' AS datetime2(0))
)

结果:

2012-12-01 00:03:21

尝试SMALL DATETIME

SELECT CAST(DATEADD(SS,CONVERT(INT, 1354320000), CAST('1970-01-01 00:00:00' AS DATETIME))AS SMALLDATETIME)

此外,通过使用 FORMAT

SELECT FORMAT(DATEADD(SS,CONVERT(INT, 1354320000), CAST('1970-01-01 00:00:00' AS DATETIME)),'yyyy-MM-dd HH:mm:ss')