2016-07-26 7 views
1

Мне нужно реструктурировать объект R POSIXlt в соответствующий T-SQL-запрос, который будет возвращать SQL-время. Я предполагаю, что должен быть способ конвертировать POSIXlt в double, а затем использовать этот double для создания SQL-времени, но я не могу понять, как именно это сделать. Вот то, что я пробовал:Преобразование из R POSIXlt в T-Sql datetime

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 Дата и время.

+0

Функция 'julian (x, origin = as.Date (" 1970-01-01 "), ...)' может преобразовать объект POSIX в число дней до указанного вами источника, тогда вы сможете конвертировать в число секунд или миллисекунд. – Dave2e

+0

@ Dave2e, что на самом деле именно то, что я хотел. Вы должны отправить его в качестве ответа. – doubleOK

ответ

0

функция:

julian(x, origin = as.Date("1970-01-01"), ...) 

может преобразовать объект POSIX на количество дней до указанного вами происхождения, то вы должны быть в состоянии преобразовать в число секунд или миллисекундах

Например. :

as.numeric(julian(as.Date("2016-07-25"))) 

составляет 17007 дней с 1 января 1970 года (начало времени для Unix) или

as.numeric(julian(as.Date("2016-07-25"), origin = as.Date("1900-01-01"))) 

или 42574 дней от близко к началу времени для окон.

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" 

 Смежные вопросы

  • Нет связанных вопросов^_^