QUERY関数 Where句内での日付設定の方法

スプレッドシートのQUERY関数のWhere句で使用する、日付のフォーマットに関する解説記事です。

QUERY関数用のフォーマットで記載する必要があり、他のSQL言語と同じように指定しても日付と認識されません。

正解から言ってしまうと、以下の形式で記載する必要があります。

Where A >= date ‘2021-12-01’

ポイントは2つです。

  1. 日付の前に「date」と記載する
  2. 日付の形式は「yyyy-mm-dd」の文字列

結論から書いてしまいましたが、実際の挙動イメージなども書いていますので続きも御覧ください。

目次

QUERY関数 Where句内での日付設定のやり方

おさらいになりますが、QUERY関数内で条件を指定したいときは、Where句の中で指定を行います。日付の指定を行う場合、参照元の表データ内に日付項目の列名(アルファベット)と、指定したい日付を演算子(「=」や「>」)でつなぎます。

ここまでの情報をもとに直感的に日付指定を行ってみると、↓こんな感じでしょうか。

=QUERY(A1:F,”select * where C = ‘2021/8/1’ “)

実際のスプレッドシートに入れてみても、何のデータもマッチしません。。。

この原因は、QUERY関数内で日付を指定する際は決まったフォーマットがあり、そのフォーマットに沿っていない場合、日付として認識されないことにあります。というわけで、受け入れ可能な日付フォーマットを見てみましょう。

QUERY関数 日付の指定フォーマット
  • 日付指定をする際は、「date」という文字を日付の前に付ける
  • 日付の記載は「年」と「月」と「日」を、「-」(半角のハイフン)でつなぐ
  • 日付はその両端を、「’」(シングルクオテーション)で囲む

実際に書くときは、以下のような形になります。

=QUERY(A1:F,”select * where C = date ‘2021-8-1’ “)

日付の形式を正しく指定したことで、意図するデータ(この場合だと、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日のデータ
Where句内での日付の指定方法。※日付データはD列に含まれると過程

期間を指定する場合は、開始日と終了日の両方を満たすデータを抽出することになるので、2つの条件を「AND」でつなぎます。

Where句の条件指定についての詳細は、以下の記事もご参照ください。

あわせて読みたい
Googleスプレッドシート QUERY関数 Where句の基本的な使い方 こんにちは。コロナワクチン2回目の接種後フィーバータイム(発熱)が始まりそうなRoidです。副反応が本格化する前に、今日の記事を書いてしまいたいと思います。 今回はQ...

他のセルにある日付データを使う場合

続いて、よくある利用シーンとして、スプレッドシートの別セルに、抽出したい日付を記載するケースでのやり方をみてみます。

別のセルで、条件入力をするのはよるあるやり方

ぱっと思いつく書き方としては、こんな感じでしょうか。

=QUERY(A3:F,”select * where C = date ‘”& I1 &”‘ “)

今回は、出力が空なだけでなく、エラーが出てしまいました。

エラー内容を読み解くと、「日付の書き方が不正です。日付の書き方は、yyyy-MM-ddですよ」と言っています。なので最もシンプルな解決策は、入力データを「yyyy-MM-dd」(2021-08-01)形式にすることです。

ただ実際のところ、国内で主流となっている日付形式は「yyyy/MM/dd」とスラッシュで繋ぐ形式になっています。またスプレッドシートのデフォルトのフォーマットもスラッシュで繋ぐ形です。

なので、日付指定をする際だけ、関数を使ってフォーマットを変えるというのが良く使う解決策になります。ここで使うのがTEXT関数という関数です。

=QUERY(A3:F,”select * where C = date ‘”& TEXT(I1,”yyyy-MM-dd”) &”‘ “)

今度は無事に、8月1日のデータが抽出されました。TEXT関数は便利で奥深い関数なので、また別の記事で改めて解説はしたいと思いますので、ここでは、書き方だけ覚えておいていただければ幸いです。

というわけでまとめです。

まとめ

日付指定の方法
  • QUERY関数内で日付を指定する際は、決まったフォーマットがある
  • date ‘yyyy-MM-dd’ という形式で指定する
  • 演算子を変えることで、特定日指定、特定日の以前/以後、期間の指定も可能
  • 他のセルのデータを参照&セルのフォーマットが異なる場合は、TEXT関数を使用してフォーマットを整える

QUERY関数の日付指定の仕様はやや特殊なので、割とハマりやすいポイントです。この記事が、少しでも皆さんのハマりポイントからの脱出の一助になることを願っております。

QUERY関数に関する他の記事も御覧ください

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
目次
閉じる