スプレッドシートのQUERY関数のWhere句で使用する、日付のフォーマットに関する解説記事です。
QUERY関数用のフォーマットで記載する必要があり、他のSQL言語と同じように指定しても日付と認識されません。
正解から言ってしまうと、以下の形式で記載する必要があります。
ポイントは2つです。
- 日付の前に「date」と記載する
- 日付の形式は「yyyy-mm-dd」の文字列
結論から書いてしまいましたが、実際の挙動イメージなども書いていますので続きも御覧ください。
QUERY関数 Where句内での日付設定のやり方
おさらいになりますが、QUERY関数内で条件を指定したいときは、Where句の中で指定を行います。日付の指定を行う場合、参照元の表データ内に日付項目の列名(アルファベット)と、指定したい日付を演算子(「=」や「>」)でつなぎます。
ここまでの情報をもとに直感的に日付指定を行ってみると、↓こんな感じでしょうか。
実際のスプレッドシートに入れてみても、何のデータもマッチしません。。。
この原因は、QUERY関数内で日付を指定する際は決まったフォーマットがあり、そのフォーマットに沿っていない場合、日付として認識されないことにあります。というわけで、受け入れ可能な日付フォーマットを見てみましょう。
実際に書くときは、以下のような形になります。
日付の形式を正しく指定したことで、意図するデータ(この場合だと、8月1日のデータ)を抽出することが出来ました。
日付の範囲の指定方法
先程の例では「8月1日のデータ」を抽出しましたが、実際に使用する場合は、特定日の指定だけではなく、いつからいつまでの期間指定や、指定日以前、以後といった指定パターンが出てきます。ここでは、その指定パターンと、QUERY内での記載方法をまとめます。
指定パターン | 書き方 | 出力されるデータ |
---|---|---|
特定日 | D = date ‘2021-08-01’ | 8月1日のデータ |
特定日まで(特定日含む) | D <= date ‘2021-08-01’ | 8月1日を含む、それより前のデータ |
特定日から(特定日含む) | D >= date ‘2021-08-01’ | 8月1日を含む、それより後のデータ |
特定日より前(特定日含まない) | D < date ‘2021-08-01’ | 7月31日より前のデータ |
特定日より後(特定日含まない) | D > date ‘2021-08-01’ | 8月2日より後のデータ |
指定する期間内 | D >= date ‘2021-08-01’ And D <= date ‘2021-08-03’ | 8月1日から3日のデータ |
指定する期間 | D > date ‘2021-08-01’ And D < date ‘2021-08-03’ | 8月2日のデータ |
期間を指定する場合は、開始日と終了日の両方を満たすデータを抽出することになるので、2つの条件を「AND」でつなぎます。
Where句の条件指定についての詳細は、以下の記事もご参照ください。
他のセルにある日付データを使う場合
続いて、よくある利用シーンとして、スプレッドシートの別セルに、抽出したい日付を記載するケースでのやり方をみてみます。
ぱっと思いつく書き方としては、こんな感じでしょうか。
今回は、出力が空なだけでなく、エラーが出てしまいました。
エラー内容を読み解くと、「日付の書き方が不正です。日付の書き方は、yyyy-MM-ddですよ」と言っています。なので最もシンプルな解決策は、入力データを「yyyy-MM-dd」(2021-08-01)形式にすることです。
ただ実際のところ、国内で主流となっている日付形式は「yyyy/MM/dd」とスラッシュで繋ぐ形式になっています。またスプレッドシートのデフォルトのフォーマットもスラッシュで繋ぐ形です。
なので、日付指定をする際だけ、関数を使ってフォーマットを変えるというのが良く使う解決策になります。ここで使うのがTEXT関数という関数です。
今度は無事に、8月1日のデータが抽出されました。TEXT関数は便利で奥深い関数なので、また別の記事で改めて解説はしたいと思いますので、ここでは、書き方だけ覚えておいていただければ幸いです。
というわけでまとめです。
まとめ
QUERY関数の日付指定の仕様はやや特殊なので、割とハマりやすいポイントです。この記事が、少しでも皆さんのハマりポイントからの脱出の一助になることを願っております。
QUERY関数に関する他の記事も御覧ください