【发布时间】:2021-06-23 18:11:26
【问题描述】:
我在 SQL Server 中有带有日期时间和偏移量的表:
datetime Value Instance
--------------------------------------------------------
2021-06-18 03:48:30.0000000 +08:00 4194304 39069
2021-06-18 03:48:30.0000000 +08:00 1048576 39098
2021-06-18 03:48:30.0000000 +08:00 372736 39076
我正在使用 ODBC 库来查询 SQL。问题 - 我将列日期时间作为字符。我有数百万条记录,所以我花了几分钟时间将 datetime 列转换为 posixct,这对我的任务来说等待时间太长了:
out_data %>% mutate (datetime = as.POSIXct(datetime, tz=Sys.timezone()))
在转换过程中,我也失去了正确的时区。是否有任何模块可以查询 SQL 并将该日期时间格式接收为日期时间?
【问题讨论】:
-
我在previous question 中的代码已经将此字符串转换为正确的
POSIXt对象。它也适用于事物字符串的向量。 唯一的限制是 R 中的日期时间向量始终显示为相同的时区 ... 但它们都是正确的时间。 -
问题不一定是如何从 SQL Server 查询它(因为
odbc不正确了解DATETIMEOFFSET),你会得到它作为字符串,句号。由于您已经有代码可以将该字符串正确转换为正确的POSIXt,并且我已经确定了 R 存储时间戳向量的限制。也许问题在于您的控制台上的数据呈现? -
我定期从 SQL Server 中提取 2M 行数据,其中至少有一列(通常为 2-4)列类型为
datetimeoffset,它以character的形式出现在我面前(和你一样) .我的过程在几秒钟内而不是几分钟内正确地解析了字符串中的时区(使用gsub和format=,就像在我的answer 中一样)。您提取了多少数据,和/或您如何处理这些数据,以便花费“分钟转换”? -
您的代码:data_1 % mutate (datetime = as.POSIXct(gsub(" ([-+]\\d{2}):(\\d{2}) ", " \\1\\2", datetime), format = "%Y-%m-%d %H:%M:%OS %z")) 将日期转换为:"2021-06-17 22 :48:30 MSK" 这是正确的日期时间,但时区错误。原来是+8,现在是+3。我需要在 ggplot 图表上显示原始时间 - 03:48:30,而不是 22:38:30。我不需要将 tz 转换为本地的。我需要保持原样。
-
我不知道该说什么......根据您提供的数据,它不提供“MSK”输出。但是……你没有在你的代码中添加
tz=,所以这也许不足为奇?
标签: r sql-server datetime timezone odbc