26.2.2.4 PGQLを使用した日時データの問合せ

日時からの値の抽出、日時値の比較、異なる日時型間での変換など、PGQLを使用して日時データに対して様々な操作を実行できます。

次に、日時データが関与する様々な操作を示すPGQL問合せの例を示します。

日時プロパティの取得

次の問合せでは、グラフ内のすべての個人からdate_of_birthおよびtimestamp_of_birthプロパティが取得されます。


  SELECT n.name AS name, n.date_of_birth AS birthday, n.timestamp_of_birth AS timestamp
    FROM MATCH (n) ON people_graph
ORDER BY birthday

問合せの結果は次のようになります。

+---------------------------------------------+
| name  | birthday   | timestamp              |
+---------------------------------------------+
| Judy  | 1989-01-15 | 1989-01-15T10:15-08:00 |
| Pete  | 1995-08-01 | 1995-08-01T03:00-08:00 |
| Klara | 2001-01-29 | 2001-01-29T21:30-08:00 |
+---------------------------------------------+

日時値の比較

次の問合せでは、グラフ内の他の個人よりも年上の個人の概要が提供されます。

SELECT n.name AS person1, 'is older than' AS relation, m.name AS person2
    FROM MATCH (n) ON people_graph, (m) ON people_graph
   WHERE n.date_of_birth > m.date_of_birth
ORDER BY person1, person2

問合せの結果は次のようになります。

+-----------------------------------+
| person1 | relation      | person2 |
+-----------------------------------+
| Klara   | is older than | Judy    |
| Klara   | is older than | Pete    |
| Pete    | is older than | Judy    |
+-----------------------------------+

日時からの値の抽出

次の問合せでは、date_of_birth値から年、月および日が抽出されます。

SELECT n.name AS name
       , n.date_of_birth AS dob
       , EXTRACT(YEAR FROM n.date_of_birth) AS year
       , EXTRACT(MONTH FROM n.date_of_birth) AS month
       , EXTRACT(DAY FROM n.date_of_birth) AS day
    FROM MATCH (n) ON people_graph
ORDER BY name

問合せの結果は次のようになります。

+-----------------------------------------+
| name  | dob        | year | month | day |
+-----------------------------------------+
| Judy  | 1989-01-15 | 1989 | 1     | 15  |
| Klara | 2001-01-29 | 2001 | 1     | 29  |
| Pete  | 1995-08-01 | 1995 | 8     | 1   |
+-----------------------------------------+

異なる型の日時値の間での変換

次の問合せでは、timestamp_of_birthプロパティが次の3つの日時型の値に変換されます。
  • タイムスタンプ(タイム・ゾーンなし)
  • タイム・ゾーン付きの時刻
  • 時刻(タイム・ゾーンなし)
SELECT n.name AS name
       , n.timestamp_of_birth AS original_timestamp
       , CAST(n.timestamp_of_birth AS TIMESTAMP) AS utc_timestamp
       , CAST(n.timestamp_of_birth AS TIME WITH TIME ZONE) AS timezoned_time
       , CAST(n.timestamp_of_birth AS TIME) AS utc_time
    FROM MATCH (n) ON people_graph
ORDER BY original_timestamp

問合せの結果は次のようになります。

+-------------------------------------------------------------------------------+
| name  | original_timestamp     | utc_timestamp    | timezoned_time | utc_time |
+-------------------------------------------------------------------------------+
| Judy  | 1989-01-15T10:15-08:00 | 1989-01-15T18:15 | 10:15-08:00    | 18:15    |
| Pete  | 1995-08-01T03:00-08:00 | 1995-08-01T11:00 | 03:00-08:00    | 11:00    |
| Klara | 2001-01-29T21:30-08:00 | 2001-01-30T05:30 | 21:30-08:00    | 05:30    |
+-------------------------------------------------------------------------------+