![見出し画像](https://assets.st-note.com/production/uploads/images/121078388/rectangle_large_type_2_713ba915abf0cfa2a36dcf4008ac5b75.jpeg?width=1200)
QUERY関数で【年】【月】【日】【曜日】【四半期】を返す[QUERY関数]
集計の都合上、日付から【年】【月】【日】【曜日】【四半期】のデータを取り出したいことはよくあります。
QUERY関数では関数式内に関数を用いてそれぞれのデータを返すことができます。
下記のデータをサンプルにします。
![](https://assets.st-note.com/img/1699020006600-JZBR96wKv0.png)
QUERY関数を以下のように記述すると…
=QUERY(A:C,"select A,B,C,year(A),month(A)+1,day(A),dayofweek(A),quarter(A)")
以下(列E以下)のような値が返されます。
![](https://assets.st-note.com/img/1699020093341-XOUSzzH1Qt.png?width=1200)
QUERY関数の中で「year関数」「month関数」「day関数」「dayofweek関数」「quarter関数」を用いることにより、列Aの日付からそれぞれ「年/月/日/曜日/四半期」を返すことができます。
注意点が3つあるので解説します。
【1】month関数は1足す
Googleスプレッドシートやエクセルに於いてのmonth関数はそのまま1-12の整数を返しますが、QUERY関数内でmonth関数を用いると「0-11」の整数が返されます。
Google Apps Scriptで「getMonthメソッド」を使われたことのある方はお馴染ですね。
「1月」は「0」が返り、「2月」は「1」、「3月」は「2」、「12月」は「11」が返される仕様なのです。
ですので1を足す必要があります。
=QUERY(A:C,"select A,B,C,year(A),month(A)+1,day(A),dayofweek(A),quarter(A)")
【2】dayofweek関数で曜日を返すと数値が返るのでformat句を用いる
Googleスプレッドシートで曜日を返すにはtext関数を用います。
=text(参照セル,"ddd")
QUERY関数内でtext関数を用いることはできないようなので、代わりにdayofweekという関数を用います。
dayofweek関数をそのまま用いると「1-7」の整数が返されます。
「日曜」が「1」、「月曜」が「2」、「土曜」が「7」となります。
この整数の方が扱いやすい場合もありますが、「月」「火」「水」と日本語一文字で表示したい場合はformat句を用います。
format句を書き足した関数式はこちら。
=QUERY(A:C,"select A,B,C,year(A),month(A)+1,day(A),dayofweek(A),quarter(A) format dayofweek(A) 'ddd'")
![](https://assets.st-note.com/img/1699021512017-bY2KvKbaZw.png?width=1200)
【3】label句で項目名を整える
関数を用いると項目名がふさわしくなくなるので、label句を用いて項目名を整えます。
label句を書き足した関数式はこちら。
=QUERY(A:C,"select A,B,C,year(A),month(A)+1,day(A),dayofweek(A),quarter(A) label year(A) '年', month(A)+1 '月', day(A) '日', dayofweek(A) '曜日', quarter(A) '四半期' format dayofweek(A) 'ddd'")
![](https://assets.st-note.com/img/1699022369753-eM8aw46faJ.png?width=1200)
※本記事はある方の「QUERY関数にdayofweek関数を用いる」についてのXのポストをきっかけに、自分なりに調べまとめてみた記事です。きっかけをくださった方に感謝します。
※類似の記事を書きました。
この記事が気に入ったらサポートをしてみませんか?