如何将以毫秒为单位的日期转换为只有000而不是毫秒的日期?

时间:2019-05-01 19:28:02

标签: sql-server

我的传入数据包含以下格式的日期:

  

2019-05-01 15:20:51.920

但是在加载到目标系统后,它将转换为以下内容:

  

2019-05-01 15:20:51.000

我想转换源数据并将其与目标系统进行比较,因为我的目标数据符合要求。

2019-05-01 15:20:51.920应该转换为2019-05-01 15:20:51.000

我正在按以下方式查看转换函数,但它只是修整了ms(以getdate(0为例):

select CONVERT(DATETIME2(3),getdate())
--2019-05-01 15:20:51.920
select CONVERT(DATETIME2(2),getdate())
--2019-05-01 15:20:51.92

有人可以告诉我如何实现这一目标吗?谢谢!

5 个答案:

答案 0 :(得分:0)

为什么不使用datetime2(0)丢掉小数秒部分?

declare @dateValue datetime2(3) = SysDateTime();

select Convert(datetime2(3), Convert(datetime2(0), @dateValue));

答案 1 :(得分:0)

这应该还是一种或多或少的表现方式:

SELECT GETDATE() AS OriginalValue
, CONVERT(DATETIME, CONVERT(VARCHAR(19), GETDATE(), 121)) ValueWithoutMilliseconds

其背后的想法是通过剪切固定输出格式的最后4个字符,然后将其转换回datetime

,从而减少毫秒数

输出:

OriginalValue           |   ValueWithoutMilliseconds
----------------------------------------------------
2019-05-01 21:44:58.473 |   2019-05-01 21:44:58.000

答案 2 :(得分:0)

显然,两个日期均为datetime,并且您想将毫秒部分归零。这是一种解决方案:

SELECT srcdate, DATEADD(ms, -DATEPART(ms, srcdate), srcdate) AS newdate
FROM (VALUES
    (CAST('2019-05-01 15:20:51.920' AS datetime))
) x(srcdate)

答案 3 :(得分:0)

也许这应该给您想要的结果

DECLARE  @TodayDatatime datetime
SET @TodayDatatime = DateAdd(DAY, DateDiff(DAY, 0, GetDate()), 0)
select GETDATE()
SELECT DateAdd(SECOND, DateDiff(SECOND, @TodayDatatime, GetDate()), @TodayDatatime)

答案 4 :(得分:-1)

使用DATEADD / DATEDIFF方法截断日期可以解决此问题。另一种选择是将其转换为datetime2(0)。

SELECT DATEADD( SS, DATEDIFF(SS, '2020', aDate), '2020'),
        CAST( aDate AS datetime2(0))
FROM  (VALUES( CAST( '2019-05-01 15:20:51.920' AS datetime2(3))))x(aDate)

请注意,第一个选项将被截断,第二个选项将舍入该值。