2012-08-16 39 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');