sql服务器-从R POSIXlt转换为T-sql日期时间



我需要将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"

相关内容

  • 没有找到相关文章

最新更新