从 R POSIXlt 转换为 T-Sql 日期时间
Converting from R POSIXlt to T-Sql datetime
我需要将 R POSIXlt 对象重组为适当的 T-SQL 查询,该查询将 return 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 日期时间。
有点不清楚,因为您一直在谈论 "dates" 但似乎需要时间(自参考日期以来的小间隔持续时间)。试试这个:
date = as.POSIXlt(Sys.time())
date_num = as.numeric( as.POSIXct(date) ) # should now be seconds from MN 1970-01-01
进一步注意到 Sys.time()
应该是 POSIXct-class。根据这个,有一个 TSQL 日期时间,其格式与您从 format.POSIXt 中看到的完全相同,使用 'format' 参数的默认值:https://msdn.microsoft.com/en-us/library/ms186724.aspx,因此您甚至可以尝试(使用合适的 class接收列的定义:
date = format( as.POSIXlt(Sys.time()) )
date # now a character value
#[1] "2016-07-25 18:48:08"
函数:
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")))
或 windows 从接近开始到时间开始的 42574 天。
我需要将 R POSIXlt 对象重组为适当的 T-SQL 查询,该查询将 return 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 日期时间。
有点不清楚,因为您一直在谈论 "dates" 但似乎需要时间(自参考日期以来的小间隔持续时间)。试试这个:
date = as.POSIXlt(Sys.time())
date_num = as.numeric( as.POSIXct(date) ) # should now be seconds from MN 1970-01-01
进一步注意到 Sys.time()
应该是 POSIXct-class。根据这个,有一个 TSQL 日期时间,其格式与您从 format.POSIXt 中看到的完全相同,使用 'format' 参数的默认值:https://msdn.microsoft.com/en-us/library/ms186724.aspx,因此您甚至可以尝试(使用合适的 class接收列的定义:
date = format( as.POSIXlt(Sys.time()) )
date # now a character value
#[1] "2016-07-25 18:48:08"
函数:
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")))
或 windows 从接近开始到时间开始的 42574 天。