問題:
PostgreSQLデータベースに昨日の日付(時間なし)を表示したい。
ソリューション1:
SELECT current_date - INTEGER '1' AS yesterday_date;
今日が2020-09-24であると仮定すると、結果は次のようになります。
yesterday_date |
---|
2020-09-23 |
ディスカッション:
昨日の日付を取得するには、今日の日付から1日を引く必要があります。 current_date
を使用する 今日の日付を取得します。 current_date
の最後に角かっこは必要ないことに注意してください 働き。 PostgreSQLでは、INTEGER
を使用して、任意の日数を減算または加算できます。 キーワード。ここでは、1日を引く必要があるため、- INTEGER '1'
を使用します。 昨日の日付を取得します。この計算の結果には、列タイプがdate
のままであることに注意してください。 。
ソリューション2:
SELECT (current_date - INTERVAL '1 day')::date AS yesterday_date;
今日が2020-09-24であると仮定すると、結果は次のようになります。
yesterday_date |
---|
2020-09-23 |
ディスカッション:
current_date
を使用して今日の日付を取得します 。現在の日付から1日の間隔を引く必要があります。これを行うには、INTERVAL
を使用します キーワード。任意の時間/日付間隔を作成します(ここでは、'1 day'
、PostgreSQLでは24時間と同じです)。 INTERVAL '1 day'
を引く 今日の日付から、タイムスタンプとしてフォーマットされた列が作成されるため、date
にキャストする必要があります 。 PostgreSQLでこれを行う最も簡単な方法は、::date
を追加することです。 式全体に(式を括弧で囲むことを忘れないでください)。
もちろん、同じように簡単に任意の時間間隔で戻ることができます。次に例を示します:
SELECT (current_date - INTERVAL '3 months 10 days')::date;
INTERVAL
追加することもできます 日付に。だから、明日の日付を取得したい場合は、次の方法があります:
SELECT (current_date + INTERVAL '1 day')::date AS tomorrow_date;