問題:
PostgreSQLデータベースの2つの日時値の違いを見つけたいと考えています。
例:
私たちのデータベースには、employment
id
列にデータがあります 、first_name
、last_name
、start_date
、およびend_date
:
id | first_name | last_name | start_date | end_date |
---|---|---|---|---|
1 | バーバラ | ウィルソン | 2010-02-01 | 2018-10-30 |
2 | ロバート | アンダーソン | 2001-04-17 | 2011-12-20 |
3 | スティーブン | ネルソン | 2005-06-01 | 2019-09-23 |
従業員ごとに、名前と名前、および雇用の開始日と終了日の違いを取得しましょう。年、月、日で間隔を確認したい。
ソリューション1:
AGE()
を使用します 働き。作成するクエリは次のとおりです。
SELECT first_name, last_name, AGE(end_date, start_date) AS employment_interval FROM employment;
クエリの結果は次のとおりです。
first_name | last_name | employee_interval |
---|---|---|
バーバラ | ウィルソン | 8年8か月29日 |
ロバート | アンダーソン | 10年8か月3日 |
スティーブン | ネルソン | 14年3か月22日 |
ディスカッション:
PostgreSQLのAGE()
を使用します 2つのタイムスタンプまたは日付の間の間隔を取得する関数。この関数は2つの引数を取ります。1つ目は終了日で、2つ目は開始日です。この例では、列end_date
を使用します (つまり、従業員がその仕事をやめたとき)列start_date
(従業員がその仕事を始めたとき)。
日付の差は、年、月、日、時間などの間隔として返されます。 Steven Nelsonのクエリ 雇用期間を「14 years 3 months 22 days
」の間隔で返しました。 ’;これは、彼がこの仕事を始めた2005-06-01と、彼が仕事をやめた2019-09-23の違いです。
AGE()
関数は、現在のタイムスタンプ/日付と最初の引数の違いを表示することもできます。この場合、関数には引数が1つだけあります:
SELECT first_name, last_name, AGE(end_date) AS employment_interval FROM employment;
上記のクエリは、現在のタイムスタンプ(このテキストの場合は「2019-09-26」)と各従業員の終了日(列end_date
)の間の間隔を表示します 。
first_name | last_name | employee_interval |
---|---|---|
バーバラ | ウィルソン | 10か月27日 |
ロバート | アンダーソン | 7年9か月6日 |
スティーブン | ネルソン | 3日 |
スティーブンの仕事の最終日から現在のタイムスタンプ(執筆時点では2019-09-26)までに3日が経過しました。
ソリューション2:
AGE()
の代わりにマイナス演算子(‘-’)を使用することもできます 2つの日付を引く。
作成するクエリは次のとおりです。
SELECT first_name, last_name, end_date::DATE – start_date::DATE AS employment_interval FROM employment;
この結果では、日数の違いのみが表示されます(年、月、日ではありません):
first_name | last_name | employee_interval |
---|---|---|
バーバラ | ウィルソン | 3193 |
ロバート | アンダーソン | 3899 |
スティーブン | ネルソン | 5227 |