Chapter 13. 函式 (八):QUERY13.3 日期與時間處理

13.3 日期與時間處理


在選取欄位時,可能會只想取得日期欄位的特定部分,也有可能只想選取特定日期或時間以後的資料,而本節將介紹與上述操作相關的語法,在官方文件中分成純量函式文字表示兩部分,如下:

語法

說明

取得時間

特定部分

  • year / quarter / month / day / dayOfWeek (日期欄位)
  • hour / minute / second / millisecond (時間欄位)
  • now()

會輸出日期與時間的特定部分,可以放在選擇的欄位或條件中,例如 select hour(A)select B where dayOfWeek(B) <> 2 特殊的輸出如下:

  • dayOfWeek:禮拜日是 1、禮拜一是 2,以此類推。
  • month:一月是 0、二月是 1,以此類推。

dateDiff

dateDiff(結束日, 起始日)

會輸出結束日與起始日之間差距的天數,可以用在 select 或是 where 中,例如 select dateDiff(A,B)where dateDiff(A,B) > 3

條件中

包含時間

  • date 'yyyy-MM-dd'
  • timeofday 'HH:mm:ss[.SSS]'
  • datetime 'yyyy-MM-dd HH:mm:ss[.sss]'

上述語法用於欲在條件中加入日期、時間、日期與期間時,此外必須在前面加入 date / timeofday / datetime,才能將其轉為日期或時間判讀,例如 where A >= date '2022-01-01'where A >= timeofday '08:00:00'

toDate

toDate(日期 / 日期時間 / 數字)

將資料轉成日期格式,輸入有以下形式

  • 日期:輸出和輸入相同的值,例如 select toDate(date '2021-12-12')
  • 日期時間:會輸出日期部分,例如 select toDate(datetime '2021-12-12 12:00:00')
  • 數字:會輸出與 1970-01-01 00:00:00 相差的毫秒數,例如 todate(1650000000000) 會輸出 2022-04-15。

以下使用兩個範例說明上述語法的使用方式:

  1. 取得所有 1970/1/1 以後出生的會員的卡號、生日、性別

    公式

    • =QUERY(會員資料,"select A,B,C where year(B) >= 1970")
    • =QUERY(會員資料,"select A,B,C where B >= date '1970-01-01'")

    解說

    可以使用 year(B) >= 1970 篩選 B 欄的年份大於等於 1970 的資料,或是直接使用 B >= date '1970-01-01' 篩選大於 1970/1/1 的會員。


  1. 輸出會員卡號 1777 最後一次消費的日期及距今天數

    公式

    =QUERY(交易記錄,"select max(D),dateDiff(now(),max(D)) where (B = '1777')")

    解說

    可以使用 max(D) 得到最後一筆消費的日期,並使用 dateDiff(now(),max(D)) 計算最後一筆消費日期與今天的差距。

    了解 QUERY 中與日期相關的用法後,下一節將介紹與字串處理相關的用法!