如果您确实需要使用 1753 年之前的日期,您可以使用 DateDiff_Big 从固定时间点计算秒数,然后除以一天中的秒数。
DateDiff_Big 仅在 SQL Server 2016 之后可用。如果您有早期版本,您可以使用 DateDiff 执行类似的操作,但稍微复杂一些。
declare @x datetime2(0)
set @x = '2018-09-20T22:44:07'
select @x,
cast ( cast ( @x as datetime ) as float ),
datediff_big(second,'0001-01-01T00:00:00.000', @x ) / cast(86400 as float) - 693595,
( datediff ( day, '0001-01-01T00:00:00.000', @x ) + datediff ( second, '00:00:00.000', cast(@x as time) ) / cast(86400 as float) ) - 693595
set @x = '1804-09-20T08:35:00'
select @x,
cast ( cast ( @x as datetime ) as float ),
datediff_big(second,'0001-01-01T00:00:00.000', @x ) / cast(86400 as float) - 693595,
( datediff ( day, '0001-01-01T00:00:00.000', @x ) + datediff ( second, '00:00:00.000', cast(@x as time) ) / cast(86400 as float) ) - 693595
set @x = '1066-09-20T08:35:00'
select @x,
-- cast ( cast ( @x as datetime ) as float ), -- won't work, before 1753.
datediff_big(second,'0001-01-01T00:00:00.000', @x ) / cast(86400 as float) - 693595,
( datediff ( day, '0001-01-01T00:00:00.000', @x ) + datediff ( second, '00:00:00.000', cast(@x as time) ) / cast(86400 as float) ) - 693595