运行一些快速测试,它看起来(对我来说)一些与日期相关的函数尚未更新为使用 bigint 数据类型(例如,dateadd() 的文档仅提到 int 值作为参数) .
假设您有支持合同,我建议您与 SAP 建立一个案例,看看这是否是一个已知问题(以及是否计划/在未来的版本中提供修复),或者是否有首选的解决方法。
一个简单的解决方法是将 bigint 值分成 2 个块 .../1000 => 秒数 ...%1000 => 毫秒数 ...然后粘贴回去期望的结果,例如:
declare @ms bigint,
@newdt datetime, -- limited to 3 millisec precision
@newdtb bigdatetime, -- supports microsecs so not limited to mod(3 msec)
@newdts varchar(30) -- collect strings to convert into (big)datetime
select @ms = 1610309854301
select @newdts = convert(varchar(30),dateadd(ss, @ms/1000, '19700101'),116) + '.' +
right('000'+convert(varchar(3),@ms % 1000),3 )
select @newdt = convert(datetime,@newdts)
select @newdtb = convert(bigdatetime,@newdts)
select @newdts, convert(varchar(30),@newdt,139), convert(varchar(30),@newdtb,139)
go
这会生成:
------------------------------ ------------------------------ ------------------------------
Jan 10 2021 20:17:34.301 Jan 10 2021 20:17:34.300000 Jan 10 2021 20:17:34.301000
注意事项:
- 第二个值 (
@newdt) 表明 ASE's 对 datetime 数据类型的限制(即 3 毫秒精度)
- 以上测试在
ASE 16.0 SP03 PL07