Postgresでは、age()
関数は、2つのタイムスタンプまたは日付変数に基づいて年齢を返します。
結果は、日だけでなく、年と月を使用して返されます。
たとえば、結果は次のようになります。3年2か月30日 。
構文
次の2つの構文のいずれかを使用できます。
age(timestamp)
age(timestamp, timestamp)
最初のものは、現在の日付に基づいて年齢を返します。具体的には、current_date()
から減算します (深夜)
2番目の構文では、2つの明示的な日付に基づいて日付を取得できます。この構文を使用すると、最初の日付から2番目の日付が減算されます。つまり、年齢は今日の日付に基づいているのではなく、最初の引数で指定された日付に基づいています。
例1-今日の日付を使用する
これが最初の構文を示す例です。
SELECT age(timestamp '1987-03-14');
結果:
33 years 2 mons 30 days
この場合、私は単一の引数を提供しました。 age()
次に、関数はそれを今日の日付(クエリを実行した日付)から減算すると、結果が得られます。
これをさらに説明するために、ここでも説明しますが、今回はcurrent_date()
と一緒に クエリを実行した日付を表示します。
SELECT
current_date,
age(timestamp '1987-03-14');
結果:
current_date | age --------------+------------------------- 2020-06-13 | 33 years 2 mons 30 days
例2–カスタム日付を使用する
この例では、比較する2つの日付を提供します。したがって、年齢は今日の日付に基づいていません。これは、age()
に提供された最初の日付に基づいています 機能。
SELECT age(timestamp '2001-01-01', timestamp '2000-03-14');
結果:
9 mons 18 days
この場合、年齢は1年未満であるため、結果にはその年は含まれていません。
これは、年のみが変更された場合に何が起こるかを示す別の例です(つまり、2つの日付の月と日の部分はまったく同じですが、年は異なります)。
SELECT age(timestamp '2007-01-01', timestamp '2000-01-01');
結果:
7 years
繰り返しになりますが、関連性のない部分(この場合は月と日)を省略しているだけです。
例3–同一の日付
両方の日付が同じ場合は次のようになります。
SELECT age(timestamp '2001-01-01', timestamp '2001-01-01');
結果:
00:00:00
例4–負の年齢
2番目の日付が最初の日付よりも遅い場合は、負の年齢になります。
SELECT age(timestamp '2001-01-01', timestamp '2002-03-07');
結果:
-1 years -2 mons -6 days
ここでは、日付のすべてのコンポーネント(つまり、年、月、日のコンポーネント)にマイナス記号が付加されています。
例5–年齢(年)
年齢のみが必要な場合は、extract()
のいずれかを使用できます またはdate_part()
age()
から年を抽出します 関数の戻り値。
extract()
を使用する例を次に示します。 機能:
SELECT extract(year from age(timestamp '1997-10-25'));
結果:
22.0
AzureDataStudioで実行するとこのように表示されます。
psqlで実行すると 、私はこれを取得します:
22
両方のextract()
およびdate_part()
倍精度データ型を使用して結果を返します。
必要に応じて、::int
を追加することにより、これを整数(または他のデータ型)に変換できます。 。
SELECT extract(year from age(timestamp '1997-10-25'))::int;
結果:
22