sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLで2つの日付間の間隔を見つける方法

    問題:

    PostgreSQLデータベースの2つの日時値の違いを見つけたいと考えています。

    例:

    私たちのデータベースには、employment id列にデータがあります 、first_namelast_namestart_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

    1. Oracle11gでのXMLtable

    2. PostgreSQLでデフォルトのユーザーパスワードを設定する方法

    3. Typeof()がSQLiteでどのように機能するか

    4. MS Accessの破損パート1:一般的な原因