2016-07-26 3 views
1

R POSIXltオブジェクトをSQL datetimeを返す適切なT-SQLクエリに再構成する必要があります。私は、POSIXltをdoubleに変換し、そのdatetimeを作成するためにdoubleを使用する方法があるはずだと思っていますが、それを正確に行う方法を理解することはできません。これは、しかしR POSIXltからT-SQL datetimeへの変換

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

:その後

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

は私がdate_num(1469491570)の内容をコピーして、何が起こるかを確認するために、次のSQLクエリに貼り付けしようとした:ここで私が試したものですいくつかの乱数ではなく日付の文字列表現を期待しているので、私は予想していると思いますがエラーです。 、たとえば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"))) 

は1970年1月1日(Unixのための時間の始まり)から17007日や窓のための時間の始まりに近いから

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クラスであったであろうことを、さらに指摘しました。これによると、 'format'引数のデフォルト値を使用してformat.POSIXtから表示されるフォーマットと正確に同じフォーマットのTSQL datetimeがあります: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" 
関連する問題