1

R POSIXlt オブジェクトを、SQL 日時を返す適切な T-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));

ただし、乱数ではなく日付の文字列表現を期待しているため、これはエラーになります...

編集: POSIXlt を、たとえば 1900 年からのティック数またはミリ秒数に変換し、その数値を使用して T-SQL 日時を作成できるものを探しています。

4

2 に答える 2

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 日。

于 2016-07-26T22:51:28.580 に答える
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-class であることに注意してください。これによると、「format」引数のデフォルト値を使用して、format.POSIXt から表示されるのとまったく同じ形式の TSQL 日時があります: 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"
于 2016-07-26T01:37:37.857 に答える