我正在尝试通过两列提供排序功能:
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。
答案 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')