sql - 从SAS转换时间格式到 sql ( 转换时间为 elapsed )

  显示原文与译文双语对照的内容

我有一个数据集,它在"已经过"格式( 可能采用SAS格式,其中时间表示为自Jan以来经过的秒数。) 中有时间。 在sql查询中,我想将它的转换为时间戳或者日期格式。 有,的方法来做这个?

类似于这里的答案,除了我在 psql,而不是 python: 时间和日期,基于 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
;

时间: 原作者:

结果数据集使用的是UNIX时间戳,因此值是大整数( 需要去除额外的零),时间来自 Jan 。 我从老板那里获得了以下代码来转换这些代码:


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

原作者:

这是Oracle示例,可以帮助你。 有一些假设,我从你的号码中删除了 0-s 。 希望你在使用的任何数据库中都能找到这种有用的信息:


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

原作者:
...