从R POSIXlt转换为T-Sql日期时间

时间:2016-07-26 00:21:13

标签: sql-server r datetime posixct posixlt

我需要将R POSIXlt对象重构为适当的T-SQL查询,该查询将返回SQL日期时间。我想应该有一种方法将POSIXlt转换为double,然后使用该double来创建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日期时间。

2 个答案:

答案 0 :(得分: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完全相同,使用'format'参数的默认值: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"

答案 1 :(得分: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天。