Forum Stats

  • 3,874,135 Users
  • 2,266,687 Discussions
  • 7,911,732 Comments

Discussions

GMT基準への変換

user10381937
user10381937 Member Posts: 3
edited Mar 9, 2011 8:15PM in SQLとPL/SQL
where句の条件文で、ある日付型のデータをGMTに変換して比較したいと思っております。
以下、PL/SQL文の抜粋ですが、select文のto_dateの部分をGMTに変換することはできないでしょうか?
下記でおこなっていることは、日付型の値が格納されるw_dateをYYYYMMDDHH24MISS形式でいったん文字列に変換し、
SQLの条件文でto_date関数を使用して日付型で比較をしております。
w_col_createdは、date型のカラム名が入る変数です。
値としては、GMTの値が格納されます。

w_date_tochar := to_char(w_date,'YYYYMMDDHH24MISS');
w_sql_soid := 'select soid from '||w_tbl_name||' where '||w_col_created||' <= to_date('''||w_date_tochar||''',''YYYYMMDDHH24MISS'')';

以上、宜しくお願い致します。

Answers

  • weyk
    weyk Member Posts: 82
     Oracleのバージョンにもよりますが、日付(日時)関連のデータ型は、TIMESTAMP型や、TIMESTAMP with time zome型など、役に立ちそうなものが増えています。
    使用しているOracleのバージョンは何ですか?

    PL/SQLのロジック上で、DATE型だけではなく、適時、より適切な型を用いるのがよいかと思います。
    (日付シリーズ(?)の型を明示的に相互に変換するのはどうやるのだろう・・・?)

    また、「GMTに変換したい」ということは、元のタイムゾーンが存在するというのが前提になりますから、その情報も必要になりますね(データベースかカレントセッションのtime zoneでしょうか?)
  • 使用しているOracleのバージョンは、10.2.0.4 または11.2.0.1となります。
    また、TZ_OFFSET(sessiontimezone)を使用してタイムゾーンのオフセットをとってきて、それをdate型の変数に入る日付データと足して?GMT表示させることは可能でしょうか?
    意識しなければいけないのは、このスクリプトが使用されるのが日本とは限らず海外でも使用されるため、Oracleが見ているオフセットを取ってきて、その値を日付データと合わせられれば、どこで使用されても正しいGMT表示ができると思うのですが・・・。
    いかがでしょうか?
  • weyk
    weyk Member Posts: 82
    SQLリファレンスもしくは、SQL言語リファレンスにて、

    (11gのSQL言語リファレンス)
    http://download.oracle.com/docs/cd/E16338_01/server.112/b56299/sql_elements001.htm#sthref154

    (10gのSQLリファレンス)
    http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19201-02/sql_elements.html#32205

    あたりから、日付にかかわる部分がしばらく続きますから、読んでみてください(TIMESTAMP型(with timezone)は、基本UTCで、timezoneのデータも含みます。with local time zoneの場合は、timezoneのデータを含まない代わりに、UTCではなくセッションのtimezoneでの値です。これらは関数により明示的に変換可能です。)
    おそらく、内部ではtimestamp型を用いることで解決するのではないでしょうか。DATE型は、入出力のときだけ使う一時的な型として捕らえるといかがでしょうか。

    (DATE型は、データベースから取り出したら処理を行う前に適切なTIMESTAMP型に変換し、また、データベースに戻す際には適切な変換をすることになるかと思います)
This discussion has been closed.