Published on InterSystems Developer Community (https://community.intersystems.com)

ホーム > テーブル定義内のTIMESTAMP型のデータについて。

質問
Yuji Ohata · 2022年1月26日

テーブル定義内のTIMESTAMP型のデータについて。

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

TIMESTAMP型のデータを持つテーブルの扱いについて教えてください。

現在Ens_Util.Logを参照するシステムを開発しようとしております。
このテーブルの中にTimeLoggedというTIMESTAMP型のデータがあるのですが、
それをSELECTした際、CASTの有無で表示されるデータに差異が出ます。

SELECT
    DATE(TimeLogged),
    CAST(TimeLogged AS TIME),
    TimeLogged
FROM
    Ens_Util.Log

Expression_1|Expression_2|TimeLogged         |
------------+------------+-------------------+
  2022-01-25|    15:00:01|2022-01-26 00:00:01|
  2022-01-25|    15:00:01|2022-01-26 00:00:01|
  2022-01-25|    15:00:01|2022-01-26 00:00:01|

確認する限り9時間の差があるため、UTC時刻との時差が出ているものと考えていますが、ここで何点か疑問があります。

①
テーブルに格納されているタイムスタンプはUTC時刻か、ローカル時刻かどちらでしょうか?
⇒おそらくローカル時刻と考えています。

②
何故CASTの有無で、ローカル時刻の適応(or 除外?)の差分が出るのでしょうか?
私のIRIS側の設定の問題なのでしょうか。。

③
上記の例ではSELECTでしたが、WHEREの条件にTimeLoggedを入れたときも-9時間された値で条件に含まれる挙動をしています。
これを実際にテーブルの中に格納されている、-9時間されていない状態で扱う方法はありませんでしょうか?

力技ですが、以下のようなやり口しか思い浮かんでいません。

> WHERE $PIECE(DATEADD(hh, 9, TimeLogged), ' ', 1) >= '2022-01-26'

 

何かヒントがありましたら、ご教示いただけますと幸いです。

#InterSystems IRIS
Product version: IRIS 2021.1

ソースURL:https://jp.community.intersystems.com/post/%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E5%AE%9A%E7%BE%A9%E5%86%85%E3%81%AEtimestamp%E5%9E%8B%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%80%82