2012-08-16 65 views
0

我有一個sql查詢來獲取日期範圍的記錄。當我分析數據時,我的查詢能夠找到byut,我發現這些記錄是根據GMT格式GMT時區值重新計算的,因此使得重新編輯的結果不正確。需要根據時區更改Oracle sql查詢

我從數據庫中的unix時代值得到我的時間。

SELECT tableA.columnA,tableB.columnB 
FROM tableA INNER JOIN tableB ON tableA.aId = tableB.aId 
WHERE (to_date('1970-01-01 00:00:00 +10:00','yyyy-MM-dd hh24:mi:ss') + (tableB.epochValue/60/60/24/1000)) > to_date('--FROM_DATE--', 'yyyy-MM-dd hh24:mi:ss') 
AND (to_date('1970-01-01 00:00:00 +10:00','yyyy-MM-dd hh24:mi:ss') + (tableB.epochValue/60/60/24/1000)) <= to_date('--TO_DATE--', 'yyyy-MM-dd hh24:mi:ss'); 

我想獲取基於GMT + 10時區的記錄,但此腳本基於GMT時區獲取數據。 我想知道如何通過我的時區,以獲得使用http://www.epochconverter.com/正確的日期對象

,我獲得的這些值 我的時代價值 - 1345079730 GMT:星期四,2012年8月16日一點15分30秒GMT 您的時區:週四2012年8月16日十一時15分30秒GMT + 10

我的數據庫 - Oracle數據庫11g企業版發佈11.2.0.2.0 - 64位

回答

0

找到了答案,我的問題。

顯然,你需要在你計算的時代價值,以及

  1. 添加10小時(10 * 60 * 60 * 1000毫秒)的時代價值考慮的時區設置 - 劃時代的電流值是在格林尼治標準時間所以爲了使它成爲EST(GMT + 10),我加了這個。
  2. 使用TO_TIMESTAMP_TZ代替TO_DATE

    SELECT tableA.columnA,tableB.columnB 
    FROM tableA INNER JOIN tableB ON tableA.aId = tableB.aId 
    WHERE (TO_TIMESTAMP_TZ('1970-01-01 00:00:00 +10:00','yyyy-MM-dd hh24:mi:ss TZH:TZM') + ((tableB.epochValue+(10*60*60*1000))/60/60/24/1000)) > to_date('##FROM_DATE## +10:00', 'yyyy-MM-dd hh24:mi:ss TZH:TZM') 
    AND (TO_TIMESTAMP_TZ('1970-01-01 00:00:00 +10:00','yyyy-MM-dd hh24:mi:ss TZH:TZM') + ((tableB.epochValue+(10*60*60*1000))/60/60/24/1000)) <= to_date('##TO_DATE## +10:00', 'yyyy-MM-dd hh24:mi:ss TZH:TZM');