2011-09-07 66 views
3

我的任務是在3,5,7天后歸檔數據。PostgreSQL中具有不同時區的時間戳

我使用PostgreSQL。有些表具有帶時區的時間戳項,有些則沒有。到目前爲止,在相同的時間點上我會得到不同的值。我如何規範化這些數據集以獲得我的檔案中的一致性數據集?

日期類似於「2011-08-01 17:03:19 + 05:30」。

CREATE OR REPLACE FUNCTION archive(tablename text, fieldname text, days integer, archivepath text) 
    RETURNS text AS 
$BODY$ 
declare 
format_date text; 
fileName text; 
totalCount integer; 
fileNamewithCount text; 

stmt text; 
BEGIN 
format_date:=to_char(localTIMESTAMP,'YYYYmmddhhmmss'); 

stmt := 'SELECT COUNT(*) FROM '|| tableName ||' WHERE DATE('||fieldName||') < DATE(CURRENT_DATE -'||days ||')'; 

EXECUTE stmt INTO totalCount; 

IF totalCount > 0 THEN 
--raise notice 'format_date : %',format_date; 
fileName := 'D:/' || '/' || archivepath || '/' || tableName || '_' || format_date ||'.csv'; 


EXECUTE 'COPY (SELECT * FROM ' || quote_ident(tableName) || ' where date(' || quote_ident(fieldName)||') < date((current_date - integer '''|| days ||''')) limit 100000) TO '''|| fileName ||''' WITH CSV HEADER'; 

EXECUTE 'DELETE FROM ' || quote_ident(tableName) ||' where date(' || quote_ident(fieldName) || ') < date((current_date - integer '''||days ||'''))'; 

END IF; 
fileNamewithCount := totalCount || '--' || fileName ; 

RETURN fileNamewithCount; 

EXCEPTION 
     WHEN OTHERS THEN RAISE EXCEPTION 'ERROR: % : %.',SQLSTATE,SQLERRM; 

END;$BODY$ 
    LANGUAGE plpgsql VOLATILE 
    COST 100; 
ALTER FUNCTION archive(text, text, integer, text) OWNER TO postgres; 
+0

等待,什麼是你的問題? – Dave

+0

@Dave我重寫了它,所以現在它是一個問題。 –

回答

2

試試這個:

SELECT TIMESTAMP '2001-02-16 20:38:40+1' AT TIME ZONE 'UTC'; 

..哪裏UTC代表 「協調世界時」。您可以使用任何其他時區名稱或縮寫 - 請閱讀docs。對於接受時區縮寫列表:

SELECT * FROM pg_timezone_abbrevs; 

寫您的查詢是這樣的:

SELECT * FROM my_tbl WHERE (my_ts_fld AT TIME ZONE 'UTC')::date = $my_date; 
相關問題