007*_*007 1 t-sql sql-server datetime date sql-server-2016
代码:
DECLARE @var DATETIMEOFFSET(7) ;
-- Rounding up
SET @var = '2020-03-20 12:00:29.9999999 -08:00' ;
SELECT DATEADD ( ms, 500 - DATEPART ( ms, DATEADD ( MILLISECOND, 500, @var )), @var ) ;
-- Actual: 2020-03-20 12:00:30.0009999 -08:00
-- Expected: 2020-03-20 12:00:30.0000000 -08:00 -- Notice that precision is rounded up to '0000000'
-- Rounding down
SET @var = '2020-03-20 12:00:30.0000001 -08:00' ;
SELECT DATEADD ( ms, 500 - DATEPART ( ms, DATEADD ( MILLISECOND, 500, @var )), @var ) ;
-- Actual: 2020-03-20 12:00:30.0000001 -08:00
-- Expected: 2020-03-20 12:00:30.0000000 -08:00 -- Notice that precision is rounded down to '0000000'
GO
Run Code Online (Sandbox Code Playgroud)
目标:我想根据毫秒 < 5###### 或毫秒 >= 5###### 舍入到最接近的秒数。到目前为止,我的查询确实正确地将秒数四舍五入,只是没有将精度四舍五入到我想要的 0000000。
投射到目标精度将为您处理舍入:
select cast(@var as datetimeoffset(0));
Run Code Online (Sandbox Code Playgroud)
如果您仍然想要结果 as datetimeoffset(7),那么您可以cast两次:
select cast(cast(@var as datetimeoffset(0)) as datetimeoffset(7));
Run Code Online (Sandbox Code Playgroud)