将时间戳从一个时区转换为另一个时区

Wamglind carmasaic
    A Table named TRADES has the following structure and Data:

    CREATE TABLE trades (
        trade_id                NUMBER,
        trade_execution_tmstmp  TIMESTAMP(6),
        time_zone_name          VARCHAR2 (30 BYTE),
        last_trade_marker       TIMESTAMP(6)
);

在此处输入图片说明

trade_id -- Unique ID for every trade

trade_execution_tmstmp-在EST执行交易的时间time_zone_name-交易的本地时区last_trade_marker-在特定日期最后一次交易的EST时间

需求是这样的:我必须开发一个程序将隔日交易插入另一个表next_day_trades中。

如果该过程在1月2日运行(在这种情况下),那么第二天的交易只有trade_id =4。因此,next_day_trades表将有1条记录。

决定第二天交易的逻辑如下:trade_execution_tmstmp在EST中。必须将其转换为本地时间戳,以查看何时在本地市场实际执行交易。在这种情况下,澳大利亚/悉尼适用于所有行业。last_trade_marker是该市场中最后一笔交易的时间。

下面是表格中第3和第4条记录的说明。

交易3在'1/2/2015 1:00:00.000000 PM'(EST)执行。如果交易在12之间执行,则相当于澳大利亚/悉尼时间为'1/3/2015 4:00:00.000000 AM'1月2日的最后交易标记为'1/3/2015 2:00:00.000000 AM' 00-02:00 AM(最后交易标记),这将是第二天的交易。因此,交易3不是隔日交易。

交易4在'1/2/2015 10:00:00.000000 AM'(EST)执行。如果交易在12之间执行,则相当于澳大利亚/悉尼时间为'1/3/2015 1:00:00.000000 AM'1月2日的最后交易标记为'1/3/2015 2:00:00.000000 AM' 00-02:00 AM(最后交易标记),这将是第二天的交易。因此,交易4是第二天的交易。

注意:仅在存储的Proc执行日包括次日交易。这就是为什么,如果Proc在1月2日运行,则仅将交易4插入next_day_trades表中而不将交易2插入。

请帮助我提出一个用于插入的SELECT查询。

亚历克斯·普尔

您可以分两步将EST时间转换为声明的时区;首先,通过声明原始值位于哪个时区from_tz(),然后使用at time zone转换运算符。

您还需要将最后一个商标标记转换为带有时区的时间戳,并且由于还需要捕获当天的开始时间(在00:00-02:00范围内),因此需要将其截短-日期-将其应用于该日期之前from_tz()

select trade_id, trade_execution_tmstmp, time_zone_name, last_trade_marker,
  from_tz(trade_execution_tmstmp, 'EST') at time zone time_zone_name
    as trade_execution_local_tmstmp,
  from_tz(cast(trunc(last_trade_marker) as timestamp), time_zone_name)
    as last_trade_marker_start,
  from_tz(last_trade_marker, time_zone_name) as last_trade_marker_end
from trades;

在更改会话以格式化值方面略有不同:

alter session set NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
alter session set NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH24:MI:SS TZR';

得到:

  TRADE_ID TRADE_EXECUTION_TMSTM TIME_ZONE_NAME   LAST_TRADE_MARKER     TRADE_EXECUTION_LOCAL_TMSTMP         LAST_TRADE_MARKER_START              LAST_TRADE_MARKER_END              
---------- --------------------- ---------------- --------------------- ------------------------------------ ------------------------------------ ------------------------------------
         1 2015-01-01 13:00:00   Australia/Sydney 2015-01-02 02:00:00   2015-01-02 05:00:00 AUSTRALIA/SYDNEY 2015-01-02 00:00:00 AUSTRALIA/SYDNEY 2015-01-02 02:00:00 AUSTRALIA/SYDNEY
         2 2015-01-01 10:00:00   Australia/Sydney 2015-01-02 02:00:00   2015-01-02 02:00:00 AUSTRALIA/SYDNEY 2015-01-02 00:00:00 AUSTRALIA/SYDNEY 2015-01-02 02:00:00 AUSTRALIA/SYDNEY
         3 2015-01-02 13:00:00   Australia/Sydney 2015-01-03 02:00:00   2015-01-03 05:00:00 AUSTRALIA/SYDNEY 2015-01-03 00:00:00 AUSTRALIA/SYDNEY 2015-01-03 02:00:00 AUSTRALIA/SYDNEY
         4 2015-01-02 10:00:00   Australia/Sydney 2015-01-03 02:00:00   2015-01-03 02:00:00 AUSTRALIA/SYDNEY 2015-01-03 00:00:00 AUSTRALIA/SYDNEY 2015-01-03 02:00:00 AUSTRALIA/SYDNEY

根据我理解的规则,您可以比较那些调整后的列值来决定是否应该进行第二天交易:

select trade_id, trade_execution_tmstmp, time_zone_name, last_trade_marker,
  case when from_tz(trade_execution_tmstmp, 'EST') at time zone time_zone_name
     between from_tz(cast(trunc(last_trade_marker) as timestamp), time_zone_name)
       and from_tz(last_trade_marker, time_zone_name)
     then 'Yes' else 'No' end as next_day_trade
from trades;

  TRADE_ID TRADE_EXECUTION_TMSTM TIME_ZONE_NAME   LAST_TRADE_MARKER     NEXT_DAY_TRADE
---------- --------------------- ---------------- --------------------- --------------
         1 2015-01-01 13:00:00   Australia/Sydney 2015-01-02 02:00:00   No            
         2 2015-01-01 10:00:00   Australia/Sydney 2015-01-02 02:00:00   Yes           
         3 2015-01-02 13:00:00   Australia/Sydney 2015-01-03 02:00:00   No            
         4 2015-01-02 10:00:00   Australia/Sydney 2015-01-03 02:00:00   Yes           

“之间”可能不是此处的正确选择;取决于是否将恰好在02:00:00.0进行的交易计为第二天。您可能需要

trade_execution_local_tmstmp >= last_trade_marker_start
and trade_execution_local_tmstmp < last_trade_marker_end

无论哪种方式,您都可以使用相同的条件来决定将哪些行复制到单独的表中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将时间(由字符串表示)从一个时区转换为另一个时区

来自分类Dev

使用joda时间将一个时区转换为另一个时区

来自分类Dev

Python日期时间从一个本地时区转换为另一个本地时区(+ DST奖励)

来自分类Dev

在Android中将日期时间从一个时区转换为另一个时区

来自分类Dev

如何将时间戳字符串转换为另一个时区的时间戳

来自分类Dev

如何将日期从一个时区转换为另一个时区

来自分类Dev

使用Java 8时间将时间从一个时区转换为另一个时区

来自分类Dev

在Android中指定GMT格式时,如何将日期和时间从一个时区转换为另一个时区

来自分类Dev

Rails:将未来的会议时间在一个时区转换为另一个时区

来自分类Dev

在php中将json日期格式从一个时区转换为另一个时区

来自分类Dev

在php中将json日期格式从一个时区转换为另一个时区

来自分类Dev

SQL Server将日期时间转换为另一个时区?

来自分类Dev

moment.js将日期时间从另一个时区转换为UTC

来自分类Dev

如何将本地时间转换为另一个时区?

来自分类Dev

将双精度日期和时间值转换为另一个时区?

来自分类Dev

在Java中将日期从一个时区转换为另一时区

来自分类Dev

MongoDB聚合:将日期转换为另一个时区

来自分类Dev

如何将DateTimeOffset转换为另一个时区

来自分类Dev

Angular JS:将日期转换为另一个时区

来自分类Dev

如何将谷歌日历中的全天事件转换为另一个时区?

来自分类Dev

OracleSQL 将日期字段转换为另一个时区

来自分类Dev

在VB.NET中如何将MST时区值转换为另一个时区?

来自分类Dev

Python Pandas 日期索引系列日期和时间转换为一个时区到另一个时区

来自分类Dev

根据另一个时区获取一个时区的办公时间

来自分类Dev

moment-timezone:从一个时区转换为另一时区时未获得所需的时间

来自分类Dev

将时间戳从一个文件插入另一个文件

来自分类Dev

当两种日期类型均为DateTimeOffset时,将日期从一个时区转换为另一时区

来自分类Dev

将值从一个javascript函数转换为另一个

来自分类Dev

检查当地时间针对给定时间在另一个时区

Related 相关文章

  1. 1

    将时间(由字符串表示)从一个时区转换为另一个时区

  2. 2

    使用joda时间将一个时区转换为另一个时区

  3. 3

    Python日期时间从一个本地时区转换为另一个本地时区(+ DST奖励)

  4. 4

    在Android中将日期时间从一个时区转换为另一个时区

  5. 5

    如何将时间戳字符串转换为另一个时区的时间戳

  6. 6

    如何将日期从一个时区转换为另一个时区

  7. 7

    使用Java 8时间将时间从一个时区转换为另一个时区

  8. 8

    在Android中指定GMT格式时,如何将日期和时间从一个时区转换为另一个时区

  9. 9

    Rails:将未来的会议时间在一个时区转换为另一个时区

  10. 10

    在php中将json日期格式从一个时区转换为另一个时区

  11. 11

    在php中将json日期格式从一个时区转换为另一个时区

  12. 12

    SQL Server将日期时间转换为另一个时区?

  13. 13

    moment.js将日期时间从另一个时区转换为UTC

  14. 14

    如何将本地时间转换为另一个时区?

  15. 15

    将双精度日期和时间值转换为另一个时区?

  16. 16

    在Java中将日期从一个时区转换为另一时区

  17. 17

    MongoDB聚合:将日期转换为另一个时区

  18. 18

    如何将DateTimeOffset转换为另一个时区

  19. 19

    Angular JS:将日期转换为另一个时区

  20. 20

    如何将谷歌日历中的全天事件转换为另一个时区?

  21. 21

    OracleSQL 将日期字段转换为另一个时区

  22. 22

    在VB.NET中如何将MST时区值转换为另一个时区?

  23. 23

    Python Pandas 日期索引系列日期和时间转换为一个时区到另一个时区

  24. 24

    根据另一个时区获取一个时区的办公时间

  25. 25

    moment-timezone:从一个时区转换为另一时区时未获得所需的时间

  26. 26

    将时间戳从一个文件插入另一个文件

  27. 27

    当两种日期类型均为DateTimeOffset时,将日期从一个时区转换为另一时区

  28. 28

    将值从一个javascript函数转换为另一个

  29. 29

    检查当地时间针对给定时间在另一个时区

热门标签

归档