我的传入数据包含以下格式的日期:
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
有人可以告诉我如何实现这一目标吗?谢谢!
答案 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)
请注意,第一个选项将被截断,第二个选项将舍入该值。