我想编写一个T-SQL函数,它将SQL Server日期时间值转换为输入日期和01 JANUARY 1970 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
如果我喂它02 Jan 1970 00:00:00.000它应该返回一天中的毫秒数,86400000,它会:
declare @indate datetime
set @indate = cast('19700102 00:00:00.000' as datetime)
select dbo.jDate(@indate)
如果我在1969年12月19日23:59:59喂它,它应该返回1000,即一秒钟内的毫秒数。它会这样做。
declare @indate datetime
set @indate = cast('19691231 23:59:59.000' as datetime)
select dbo.jDate(@indate)
但如果我在1970年1月1日00:00:00.088(也就是只有几毫秒的差异)喂它,它应该返回毫秒数, 88 。但它返回 86 。
declare @indate datetime
set @indate = cast('19700101 00:00:00.088' as datetime)
select dbo.jDate(@indate)
导致两毫秒错误的原因是什么?
答案 0 :(得分:1)
根据documentation,DATETIME
数据类型的分辨率将四舍五入为.000,.003或.007秒的增量。
要获得更高的精度,请考虑DATETIME2
数据类型。