sql - 在 SQL Server 2008R2 上以毫秒为单位返回 DATEDIFF

标签 sql sql-server date sql-server-2008-r2 timestamp

我有一个返回 x 值的 SQL 查询,它是一个时间戳,映射到 long 类型的 C# 对象:

SELECT DATEDIFF(second, { d '1970-01-01'}, dateCompleted) AS x

上面的语句有效。但是,我需要获取时间戳以返回以毫秒而不是秒为单位的值。在 SQL Server 2016 中,我可以这样做:

SELECT DATEDIFF_BIG(millisecond, { d '1970-01-01'}, dateCompleted) AS x

...而且效果很好。但是,我仍然停留在 SQL Server 2008 R2 上。

我可以返回值并在 C# 中进行一些后处理以将 x 乘以 1000,但我想知道是否有一种方法可以在查询本身中处理这个问题。我尝试了一个简单的乘法,但它产生了一个算术溢出错误:

SELECT DATEDIFF(second, { d '1970-01-01'}, dateCompleted) * 1000 AS x

谁能建议如何完成这个?

谢谢。

最佳答案

DATEDIFF 返回一个 INT,因此如果两个日期相距很远(大约 25 天),则它不能用于返回以毫秒为单位的差异。但是,您可以以秒为单位计算差异,BIGINT 乘以 1000,然后加上毫秒:

SELECT DATEDIFF(SECOND, '1970-01-01', dateCompleted)
     * CAST(1000 AS BIGINT)
     + DATEPART(MILLISECOND, dateCompleted)

假设您需要 UNIX 时间戳,您还需要将时区偏移量添加到结果中(我希望您将其与完成日期一起存储)。

关于sql - 在 SQL Server 2008R2 上以毫秒为单位返回 DATEDIFF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55537472/

相关文章:

MYSQL <> 运算符代替 NOT IN

sql-server - 如何将开发数据库更改移动到生产数据库?

regex - 日期的正则表达式(月 dd , yyyy)

SQL 查询根据另一列的值查找唯一列值

mysql - 如果只知道月份和年份,存储在 DATE MySQL 变量中的适当值是多少?

C# DateTime 解析国际文化

Select 语句中的 SQL 函数调用以填充 Reporting Services 报告

php - 为什么不自动创建关系表? (在mysql中)

mysql - SQL更新忽略重复项

sql-server - 如何按有拼写错误的列进行分组