我需要将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));
然而,这是错误的,我想这是意料之中的,因为它需要日期的字符串表示,而不是一些随机数。。。
EDIT:我正在寻找一种可以将POSIXlt转换为从1900开始的一个数字(例如,毫秒),然后使用该数字创建T-SQL日期时间的方法。
函数:
julian(x, origin = as.Date("1970-01-01"), ...)
可以将POSIX对象转换为到达指定原点的天数,那么您应该能够转换为秒数或毫秒数。
例如:
as.numeric(julian(as.Date("2016-07-25")))
是1970年1月1日起的17007天(Unix的开始时间)或
as.numeric(julian(as.Date("2016-07-25"), origin = as.Date("1900-01-01")))
对于窗口,从接近时间开始算起为42574天。
这有点不清楚,因为你一直在谈论"日期",但似乎想要时间(从参考日期开始的小时间间隔)。试试这个:
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日期时间,其格式与您从格式中看到的格式完全相同。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"