1

我需要将 R POSIXlt 对象重组为适当的 T-SQL 查询,该查询将返回 SQL 日期时间。我想应该有一种方法可以将 POSIXlt 转换为双精度,然后使用该双精度来生成 SQL 日期时间,但我无法弄清楚如何做到这一点。这是我尝试过的:

date = as.POSIXlt(Sys.time())
date_num = as.double(date)

之后,我复制了 date_num (1469491570) 的内容并尝试将其粘贴到以下 SQL 查询中以查看会发生什么:

select CONVERT(datetime, convert(varchar(10), 1469491570));

然而,这个错误,我猜这是意料之中的,因为它需要一个日期的字符串表示,而不是一些随机数......

编辑:我正在寻找可以将 POSIXlt 转换为从 1900 年开始的抽动或毫秒数的东西,然后使用该数字创建 T-SQL 日期时间。

4

2 回答 2

0

功能:

julian(x, origin = as.Date("1970-01-01"), ...)

可以将 POSIX 对象转换为指定原点的天数,那么您应该能够转换为秒数或毫秒数。

例如:

as.numeric(julian(as.Date("2016-07-25"))) 

是从 1970 年 1 月 1 日(Unix 时间的开始)算起的 17007 天,或者

as.numeric(julian(as.Date("2016-07-25"), origin = as.Date("1900-01-01"))) 

或从接近时间开始的 42574 天(对于 windows)。

于 2016-07-26T22:51:28.580 回答
0

有点不清楚,因为您一直在谈论“日期”,但似乎想要时间(自参考日期以来的小间隔持续时间)。尝试这个:

      date = as.POSIXlt(Sys.time())
      date_num = as.numeric( as.POSIXct(date) ) # should now be seconds from MN 1970-01-01

进一步注意到那Sys.time()将是 POSIXct 类。据此,有一个 TSQL 日期时间,其格式与您从 format.POSIXt 中看到的完全一样,使用“格式”参数的默认值:https ://msdn.microsoft.com/en-us/library/ms186724.aspx ,因此您甚至可以尝试(使用合适的接收列类定义:

date = format( as.POSIXlt(Sys.time()) )
date     # now a character value
#[1] "2016-07-25 18:48:08"
于 2016-07-26T01:37:37.857 回答