我需要使用预定开始时间(PST)和预定结束时间(PST)检查正在进行的任务.Datatype是计划开始时间和预定结束时间的时区时间戳。
sysdate(UTC)应位于开始日期和结束日期之间,以确认正在进行的任务
JIRA_KEY sch_start_time sch_end_time
1 11/04/2016 1:00:00 AM PST 14/04/2016 2:00:00 PM PST
2 12/04/2016 2:00:00 AM PST 12/04/2016 5:00:00 AM PST
3 12/04/2016 2:00:00 AM PST 14/04/2016 5:00:00 AM PST
预期产出 -
JIRA_KEY sch_start_time sch_end_time
1 11/APR/2016 1:00:00 AM PST 14/APR/2016 2:00:00 PM PST
3 12/APR/2016 2:00:00 AM PST 14/APR/2016 5:00:00 AM PST
SYSDATE是UTC格式,截至目前为13 / APR / 2016 8:15 AM
我试过这个。但不确定使用to_timestamp_tz
进行转换select JIRA_KEY,To_CHAR( SCH_END_TIME,'DD/MON/YY HH:MI:SS PM') as SCH_END_TIME
FROM HW_JIRA_STATUS WHERE
to_timestamp_tz(SYSDATE,'DD/MON/YY HH:MI:SS PM') between SCH_START_TIME and SCH_END_TIME
答案 0 :(得分:1)
当你这样做时
to_timestamp_tz(SYSDATE,'DD/MON/YY HH:MI:SS PM')
您使用NLS_DATE_FORMAT隐式地将SYSDATE转换为字符串,然后将该字符串转换为带时区的时间戳 - 但您没有指定时区,因此它将使用数据库时区默认情况下(这也是你想要的)。
依赖NLS设置很危险,所以至少应该使用expliclt格式掩码:
to_timestamp_tz(to_char(SYSDATE, 'DD/MON/YY HH:MI:SS PM'),'DD/MON/YY HH:MI:SS PM')
...但你也可以cast
between data types而不转换为中间字符串;例如再次使用DB服务器时区:
cast(SYSDATE as timestamp with time zone)
你自己不需要做任何转换;你可以改用SYSTIMESTAMP:
WHERE SYSTIMESTAMP between SCH_START_TIME and SCH_END_TIME;
这已经在数据库服务器的时区。
答案 1 :(得分:0)
尝试此查询
select JIRA_KEY,To_CHAR( SCH_END_TIME,'DD/MON/YY HH:MI:SS PM') as SCH_END_TIME
FROM HW_JIRA_STATUS
WHERE systimestamp AT TIME ZONE 'PST' between SCH_START_TIME and SCH_END_TIME