我想编写一个 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)
是什么导致了两毫秒的错误?