0

我想编写一个 T-SQL 函数,将 SQL Server 日期时间值转换为输入日期和 1970 年 1 月 1 日 00:00:00(javascript Date 数据类型的参考日期)之间的毫秒数。

create function jDate
(@indate datetime)
returns numeric
as
begin
 declare @datediff int;
 declare @javascriptDay1 DateTime;
 set @javascriptDay1 = cast('19700101 00:00:00.000' as DateTime);
 set @datediff = DateDiff( ms, @javascriptDay1, @indate)
 return (@datediff); 
end

因此,如果我输入函数 01 JAN 1970,它应该返回 0。它的作用是:

declare @indate datetime
set @indate = cast('19700101 00:00:00.000' as datetime)
select dbo.jDate(@indate)

0

如果我在 1970 年 1 月 2 日 00:00:00.000 喂它,它应该返回一天中的毫秒数 86400000,它会:

declare @indate datetime
set @indate = cast('19700102 00:00:00.000' as datetime)
select dbo.jDate(@indate)

如果我在 1969 年 12 月 31 日 23:59:59 喂它,它应该返回 1000,即一秒内的毫秒数,它确实如此。

declare @indate datetime
set @indate = cast('19691231 23:59:59.000' as datetime)
select dbo.jDate(@indate)

但是如果我在 01 JAN 1970 00:00:00.088 喂它(即只有几毫秒的差异)它应该返回毫秒数88。但它返回86

declare @indate datetime
set @indate = cast('19700101 00:00:00.088' as datetime)
select dbo.jDate(@indate)

是什么导致了两毫秒的错误?

4

1 回答 1

1

根据文档DATETIME数据类型的分辨率四舍五入到 0.000、0.003 或 0.007 秒的增量。

要获得更高的精度,请考虑DATETIME2数据类型。

于 2014-06-25T19:01:41.820 回答