0

「経過」形式(おそらくSAS形式で、1960年1月1日からの経過秒数で表される)で時間が経過しているように見えるデータセットがあります。SQLクエリで、これをタイムスタンプまたは日付形式に変換したいと思います。これを行うための素敵でクリーンな方法はありますか?

Pythonではなくpsqlで必要なことを除いて、ここでの回答に似ています。 1970年から経過した秒数に基づく日時

これが私のデータのサンプルです:

time_var      
-------------
1344444527000  
1344448596000  
1344455497000  
1344445125000  

これが私が作りたいクエリのタイプです:

select
   time_var
   cast(time_var as timestamp) as mytimestamp,
   cast(time_var as date)      as mydatetime, 
   date(time_var)              as mydate 
from
   source_dataset
;
4

2 に答える 2

1

私のデータセットはUNIXタイムスタンプを使用していることが判明したため、値は大きな整数であり(余分なゼロは削除する必要があります)、時刻は1970年1月1日からです。これらを変換するために上司から次のコードを取得しました。

select
   timestamp with time zone 'epoch' + interval '1 second' *
      cast((cast(time_var as bigint) / 1000) as integer) as postgres_timestamp,
   date(timestamp with time zone 'epoch' + interval '1 second' *
      cast((cast(time_var as bigint) / 1000) as integer)) as postgres_date
于 2013-02-05T16:04:20.043 に答える
0

これはあなたを助けるかもしれないOracleの例です。いくつかの仮定があり、私はあなたの番号から0を削除しました。使用しているデータベースが何であれ、これがお役に立てば幸いです。

SELECT total_days
     , CAST(end_date AS timestamp) t_stamp
     , CAST(end_date AS date) final_date_time
     -- date(end_date) will not work as end_date is date already
     , TO_CHAR(TRUNC(end_date), 'MM/DD/YYYY') final_date
  FROM
  (
   SELECT ROUND(1344444527/60/60/24)         total_days
        , TO_DATE('01-01-1960','dd-mm-yyyy') start_date
        , TO_DATE('01-01-1960','dd-mm-yyyy')+ (1344444527/60/60/24) end_date
     FROM dual
  )
  /

SQL>

 TOTAL_DAYS   T_STAMP                       FINAL_DATE_TIME       FINAL_DATE
 ----------   -------------------------     -------------------   ----------
 15561        8/8/2002 4:48:47.000000 PM    8/8/2002 4:48:47 PM   08/08/2002
于 2013-01-23T19:05:14.337 に答える