2013-01-23 3 views
0

"경과 된"형식 (시간이 1 월 1 일 이후 경과 된 초 수로 표시되는 SAS 형식 일 수도 있음)로 시간이있는 것으로 보이는 데이터 집합이 있습니다. 1960). SQL 쿼리에서 이것을 타임 스탬프 또는 날짜 형식으로 변환하고 싶습니다. 이것을 할 수있는 좋은 깨끗한 방법이 있습니까? 내가 psql의에서하지 파이썬 필요 제외하고 여기에 대한 답과 유사시간 형식을 SAS에서 sql로 변환 (변환 시간이 경과 날짜로 변환)

뭔가, 다음은

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

내가 '쿼리의 유형입니다 : 여기 Time and date on the basis of seconds elapsed since 1970 year

내 데이터의 샘플입니다 다음을 작성하십시오.

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 
; 
+0

어떤 RDBMS를 사용하고 있습니까? –

+0

... 1960 년 이래로? 대부분의 RDBMS는'CAST ('1960-01-01'TIMESTAMP) + 1 초'라인을 따라 뭔가를 허용해야합니다. 날짜/시간 간격을 추가하는 특정 기능이있을 수도 있습니다. –

+0

나는 postgres를 사용하고있다. 나는 날짜로부터 간격을 얻을 수 있지만, 간격으로부터 날짜는 얻을 수 없다. 나는 stuff line을 시도하고있다. (date '1960-01-01'+ interval cast (time_var as varchar)) temp_output' –

답변

1

는 UNIX 타임 스탬프를 사용하여 내 데이터 집합을 밝혀, 그래서 값이 큰 정수 (여분의 0을 제거 할 필요) 및 시간은 월 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 
0

이것은 오라클의 예입니다. 몇 가지 가정이 있으며 귀하의 전화 번호에서 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