2016-04-13 21 views
1

予定開始時刻(PST)と予定終了時刻(PST)を使用して進行中のタスクを確認する必要があります。データ型は、スケジュール開始時刻と予定終了時刻のタイムゾーンを含むタイムスタンプです。OracleタイムゾーンをUTCからPSTに変換

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


これを試しました。しかし

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

はあなたが暗黙のうちにあなたのNLS_DATE_FORMATを使用して文字列にSYSDATEを変換し、その後しているこの文字列で検索してくださいアプトわかりませんその文字列をタイムゾーン付きのタイムスタンプに変換しますが、タイムゾーンを指定していないので、デフォルトでデータベースタイムゾーンを使用します(これはあなたが望むものです)。 NLSの設定に依存

は危険ですので、あなたは、少なくともexpliclt書式マスクを使用する必要があります。また、cast between data types中間文字列に変換せず

to_timestamp_tz(to_char(SYSDATE, 'DD/MON/YY HH:MI:SS PM'),'DD/MON/YY HH:MI:SS PM') 

...しかし、あなたはすることができます。例えばDBサーバーのタイムゾーンを再度使用する:

cast(SYSDATE as timestamp with time zone) 

あなたは自分で変換する必要はありません。代わりにSYSTIMESTAMPを使用できます。

WHERE SYSTIMESTAMP between SCH_START_TIME and SCH_END_TIME; 

これはすでにDBサーバーのタイムゾーンにあります。

+0

ありがとうございました。 –

0

TO_TIMESTAMP_TZ使用して変換があなたが

to_timestamp_tz(SYSDATE,'DD/MON/YY HH:MI:SS PM') 

を行うと

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 
関連する問題