Oracle sql 查询需要根据时区进行更改



我有一个sql查询来获取日期范围的记录。我的查询工作在分析数据时发现byut,我发现记录是根据GMT时区值重新设置的,从而使还原不正确。

我从数据库中的 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格林威治标准时间: 星期四, 16 八月 2012 01:15:30 GMT您的时区:2012 年 8 月 16 日星期四 11:15:30 GMT+10

我的数据库是 - Oracle 数据库 11g 企业版版本 11.2.0.2.0 - 64 位

找到了我问题的答案。

显然,在计算纪元值时,您还需要考虑时区设置

    将 10
  1. 小时(10*60*60*1000 毫秒)添加到纪元值 - 纪元当前值以 GMT 为单位,因此要使其成为 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');
    

相关内容

  • 没有找到相关文章

最新更新