PostgreSQLでdate型同士の差を日数で選択することは簡単だが、
月数で選択(条件指定)するのは案外手間どった為、備忘録としてメモ。
#選択する場合
SELECT EXTRACT(month from AGE(a_date, b_date))
FROM test_table;
全レコードについてそれぞれa_dateとb_dateの月の差が選択されます。
#条件指定する場合
SELECT COUNT(*) from test_table
WHERE EXTRACT(month FROM age(a_date, b_date)) = 1
a_dateからb_dateを引いて1となるレコードの数が結果として返却されます。
両パターンで使用している「EXTRACT」は以下ご覧いただければと思いますが、
日付や時刻の値から特定のフィールドを抽出する関数です。
https://www.postgresql.jp/document/7.2/user/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT
EXTRACT(month ~)と指定することで月のみを抽出することができます。
age関数は第1引数から第2引数を減算し、「年」「月」「日」を返却する関数です。
ここではEXTRACT関数で「month」つまり「月」を指定しています。