SQL按两列排序 - 日期和时区

时间:2017-11-15 09:55:32

标签: sql oracle sorting

我正在尝试通过两列提供排序功能:

  START_DATE_TIME               TIMESTAMP(6)                NOT NULL,
  START_DATE_TIME_ZONE          VARCHAR2(255)               NULL,

我在这些列中保存的常规数据如下所示:

START_DATE_TIME: 29.10.2017 01:00:00,000000000
START_DATE_TIME_ZONE: America/Los_Angeles

我通过以下方式尝试了常规订单:

SELECT
    *
FROM
    event
ORDER BY
    start_date_time ASC,
    start_date_time_zone ASC

但是,正如我可能预料的那样,它没有正确排序。时区按字词排序,而不是偏移量。我想在这里实现的是将时区应用到我在UTC中的时间,以便获得我可用于排序的确切时间点。有没有办法实现使用我拥有的结构,或者我必须合并我的两列并在那里存储时区?例如

  START_DATE_TIME            TIMESTAMP(6) WITH TIME ZONE NOT NULL

基本上我使用的是Spring Data + Oracle。

1 个答案:

答案 0 :(得分:2)

我相信这会奏效:

select to_timestamp_tz(START_DATE_TIME || ' ' || START_DATE_TIME_ZONE)
from . . . 

例如,您可以运行:

select to_timestamp_tz(timestamp '2017-10-29 01:00:00.000000000' || ' America/Los_Angeles')