Sql 为什么转换时我会浪费时间
大家早上好 出于某种原因,我正在尝试(并失败)和转换时间。我试图做的是伸出手去抓取表中的所有记录,然后每隔一段时间伸出手去抓取表中在某个时间戳之后添加到表中的任何新记录 出于测试目的,我有一个表,目前正在手动执行此操作 在这个过程中,我的第一步是接触并获取UTC格式的时间Sql 为什么转换时我会浪费时间,sql,sql-server,tsql,Sql,Sql Server,Tsql,大家早上好 出于某种原因,我正在尝试(并失败)和转换时间。我试图做的是伸出手去抓取表中的所有记录,然后每隔一段时间伸出手去抓取表中在某个时间戳之后添加到表中的任何新记录 出于测试目的,我有一个表,目前正在手动执行此操作 在这个过程中,我的第一步是接触并获取UTC格式的时间 SELECT MAX(LastModified) FROM MWOPOL 结果:2020-11-24T10:43:39.694Z 我的下一步是将这个时间转换为当地时间 SELECT CONVERT(VARCHAR(23),
SELECT MAX(LastModified) FROM MWOPOL
结果:2020-11-24T10:43:39.694Z
我的下一步是将这个时间转换为当地时间
SELECT CONVERT(VARCHAR(23), SWITCHOFFSET(CONVERT(DATETIMEOFFSET, '2020-11-24T10:43:39.694Z'), DATENAME(TzOffset, SYSDATETIMEOFFSET()))) AS [LocalTime]
SELECT CONVERT(VARCHAR(23),(DATEADD(HOUR,DATEDIFF(HOUR, GETDATE(), GETUTCDATE()),(('2020-11-24 05:43:39.694')))),127) AS [ConvertedBackToUTC]
结果:2020-11-24 05:43:39.694
我选择了Varchar(23)而不是DATETIME,因为如果我这样做,我会损失0.001的时间。
当我尝试将时间转换为本地时间时
SELECT CONVERT(VARCHAR(23), SWITCHOFFSET(CONVERT(DATETIMEOFFSET, '2020-11-24T10:43:39.694Z'), DATENAME(TzOffset, SYSDATETIMEOFFSET()))) AS [LocalTime]
SELECT CONVERT(VARCHAR(23),(DATEADD(HOUR,DATEDIFF(HOUR, GETDATE(), GETUTCDATE()),(('2020-11-24 05:43:39.694')))),127) AS [ConvertedBackToUTC]
结果:2020-11-24T10:43:39.693
所以,当我把时间转换回来的时候,我还是会浪费时间。如果在.694处添加了记录,则可能/将导致问题。我最终陷入恶性循环,这将导致我继续添加到表中,即使添加了新记录。使用代替日期时间。
这应该适合您:
SELECT CONVERT(DATETIME2(3), SWITCHOFFSET(CONVERT(DATETIMEOFFSET, '2020-11-24T10:43:39.694Z'), DATENAME(TzOffset, SYSDATETIMEOFFSET()))) AS [LocalTime]
datetime
精确到1/300秒。它无法存储2020-11-24T05:43:39.694
,因此它将其存储到最接近的值is value,2020-11-24T10:43:39.6933333~
=2020-11-24T10:43:39.693
对此有什么好的解决方法吗?不要使用datetime
,使用可以精确到100纳秒的datetime2
CONVERT(datetime2(3),'2020-11-24 05:43:39.694')
可以解决问题。另外,请注意,在第一次查询中,您使用的不是datetime
,而是datetimeoffset(7)
。