2016-07-26 21 views
1

Ich muss das R POSIXlt Objekt in eine entsprechende T-SQL-Abfrage restrukturieren, die eine SQL-Datetime zurückgeben wird. Ich stelle mir vor, es sollte eine Möglichkeit geben, das POSIXlt zu einem Double zu konvertieren und dann dieses Double zu verwenden, um eine SQL-Datetime zu erstellen, aber ich bin nicht in der Lage herauszufinden, wie genau das gemacht werden soll. Hier ist, was ich versucht habe:Konvertieren von R POSIXlt in T-Sql datetime

date = as.POSIXlt(Sys.time()) 
date_num = as.double(date) 

Danach habe ich kopiert den Inhalt date_num (1469491570) und versucht, sie in die folgende SQL-Abfrage einfügen, um zu sehen, was passiert:

select CONVERT(datetime, convert(varchar(10), 1469491570)); 

jedoch diese Fehler out, was ich denke, wird erwartet, da es erwartet eine Zeichenfolge Darstellung eines Datums nicht irgendeine Zufallszahl ...

EDIT: Ich bin auf der Suche nach etwas, das den POSIXlt in eine Reihe von Tics oder Millisekunden aus konvertieren kann sagen wir 1900, und verwendet dann diese Nummer, um ein T-SQL zu erstellen Terminzeit.

+0

die Funktion 'julian (x, origin = as.Date (" 1970-01-01 "), ...)' kann das POSIX-Objekt in die Anzahl der Tage zu Ihrem angegebenen Ursprung konvertieren, dann sollten Sie in der Lage sein umwandeln in die Anzahl von Sekunden oder Millisekunden. – Dave2e

+0

@ Dave2e das ist eigentlich genau das, was ich wollte. Sie sollten es als Antwort posten. – doubleOK

Antwort

0

die Funktion:

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

das POSIX-Objekt auf die Anzahl der Tage, an den angegebenen Herkunft umwandeln kann, dann sollten Sie in der Lage sein, um die Anzahl von Sekunden oder Millisekunden zu konvertieren

zum Beispiel. :

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

sind 17.007 Tage vom 1. Januar 1970 (Beginn der Zeit für Unix) oder

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

oder 42.574 Tage aus der Nähe des Beginn der Zeit für Fenster.

0

Es ist ein bisschen unklar, weil Sie immer wieder von "Daten" reden, aber scheinen wollen, Zeiten (Dauer in kleinen Abständen seit einem Referenzdatum). Versuchen Sie folgendes:

 date = as.POSIXlt(Sys.time()) 
     date_num = as.numeric(as.POSIXct(date)) # should now be seconds from MN 1970-01-01 

ferner in Anbetracht dessen, dass Sys.time() würde POSIXct-Klasse gewesen. Demnach gibt es ein TSQL datetime mit einem Format genau wie man es von format.POSIXt mit den Standardwerten für das 'format'-Argument sieht: https://msdn.microsoft.com/en-us/library/ms186724.aspx, so könnte man es sogar versuchen (mit passender Klassendefinition der empfangenden Spalten:

date = format(as.POSIXlt(Sys.time())) 
date  # now a character value 
#[1] "2016-07-25 18:48:08"