我需要将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日期时间。
答案 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天。