Return SQL Server 2008R2 上的 DATEDIFF 以毫秒为单位
Return DATEDIFF in milliseconds on SQL Server 2008R2
我有一个 SQL 查询 return x 的值,它是一个时间戳,映射到 long
:
类型的 C# 对象
SELECT DATEDIFF(second, { d '1970-01-01'}, dateCompleted) AS x
以上说法有效。但是,我需要将时间戳记 return 以毫秒而不是秒为单位的值。在 SQL Server 2016 中我可以这样做:
SELECT DATEDIFF_BIG(millisecond, { d '1970-01-01'}, dateCompleted) AS x
...效果很好。但是,我卡在 SQL Server 2008 R2 上。
我可以 return 值并在 C# 中做一些 post 处理以将 x 乘以 1000,但我想知道是否有一种方法可以在查询本身中处理这个问题。我已经尝试了一个简单的乘法,但会产生 算术溢出错误:
SELECT DATEDIFF(second, { d '1970-01-01'}, dateCompleted) * 1000 AS x
有人可以建议如何完成这个吗?
谢谢。
使用 cast()
或 convert()
怎么样?
SELECT DATEDIFF(second,{ d '1970-01-01'},dateCompleted) * convert(bigint, 1000) AS x
也许是一个变量?
DECLARE @milli BIGINT;
SET @milli = DATEDIFF(second,{ d '1970-01-01'},dateCompleted) * 1000.0;
SELECT @milli;
Datediff return int 值,所以第二个将有 int 数据类型的问题。
你可以得到分钟或天,以及 60 的倍数得到秒
SELECT DATEDIFF(m,{ d '1970-01-01'},getdate()) * 1000 * 60
DATEDIFF
return 是一个 INT,因此如果两个日期相距很远(大约 25 天),则它不能用于 return 毫秒差异。但是,您可以计算秒数的差异,BIGINT 乘以 1000,然后加上毫秒:
SELECT DATEDIFF(SECOND, '1970-01-01', dateCompleted)
* CAST(1000 AS BIGINT)
+ DATEPART(MILLISECOND, dateCompleted)
假设您需要 UNIX 时间戳,您还需要将时区偏移量添加到结果中(我希望您将其与完成日期一起存储)。
我有一个 SQL 查询 return x 的值,它是一个时间戳,映射到 long
:
SELECT DATEDIFF(second, { d '1970-01-01'}, dateCompleted) AS x
以上说法有效。但是,我需要将时间戳记 return 以毫秒而不是秒为单位的值。在 SQL Server 2016 中我可以这样做:
SELECT DATEDIFF_BIG(millisecond, { d '1970-01-01'}, dateCompleted) AS x
...效果很好。但是,我卡在 SQL Server 2008 R2 上。
我可以 return 值并在 C# 中做一些 post 处理以将 x 乘以 1000,但我想知道是否有一种方法可以在查询本身中处理这个问题。我已经尝试了一个简单的乘法,但会产生 算术溢出错误:
SELECT DATEDIFF(second, { d '1970-01-01'}, dateCompleted) * 1000 AS x
有人可以建议如何完成这个吗?
谢谢。
使用 cast()
或 convert()
怎么样?
SELECT DATEDIFF(second,{ d '1970-01-01'},dateCompleted) * convert(bigint, 1000) AS x
也许是一个变量?
DECLARE @milli BIGINT;
SET @milli = DATEDIFF(second,{ d '1970-01-01'},dateCompleted) * 1000.0;
SELECT @milli;
Datediff return int 值,所以第二个将有 int 数据类型的问题。
你可以得到分钟或天,以及 60 的倍数得到秒
SELECT DATEDIFF(m,{ d '1970-01-01'},getdate()) * 1000 * 60
DATEDIFF
return 是一个 INT,因此如果两个日期相距很远(大约 25 天),则它不能用于 return 毫秒差异。但是,您可以计算秒数的差异,BIGINT 乘以 1000,然后加上毫秒:
SELECT DATEDIFF(SECOND, '1970-01-01', dateCompleted)
* CAST(1000 AS BIGINT)
+ DATEPART(MILLISECOND, dateCompleted)
假设您需要 UNIX 时间戳,您还需要将时区偏移量添加到结果中(我希望您将其与完成日期一起存储)。