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 |
+-------------------------------------------------------------------------------+
親トピック: 日時データ型の使用