PostgreSQL、「今日」と比較した日付のチェック


103

誰かがいくつかのPostgresを手伝ってくれるかどうか疑問に思っていました。mydatepostgresの日付タイプであるという列があるテーブルがあります。私は次のようなことをしたいです:

SELECT * FROM MyTable WHERE mydate > [Today-1year]

私はこれまでにPostgresを使用したことがなく、いくつかの関数の名前を知る必要があるだけだと確信しています-自分でリファレンスを喜んで調べます。誰かが私を正しい方向に向けることができますか?

ありがとう!


2
記録のために、ドキュメントはここにあります -少し慣れる必要がありますが、非常に包括的です。
モニカの訴訟に資金を提供

回答:


173
select * from mytable where mydate > now() - interval '1 year';

時間ではなく日付のみを気にする場合はcurrent_datenow()


これは完璧です!ありがとう
JustGage

1
now()タイムスタンプで、この範囲はまた、今日だけの日の一部丁度から年前にその日の一部が含まれますので。丸1日フィルタリングする場合はnow()::date、Alex Howanskyの提案どおりにキャストしてください。
tokenizer_fsj

1
current_date代わりに使用する@tokenizer_fsjnow()
Paul Tomblin

66

私はこれでうまくいくと思います:

SELECT * FROM MyTable WHERE mydate > now()::date - 365;

10
とは異なりinterval '1 year'、うるう年は考慮されないことに注意してください。それはあなたの懸念ではないかもしれませんが、もしそうなら、私の答えを使ってください。
ポールトンブリン

これは受け入れられる答えになるはずです。 now()はタイムスタンプを返すため、を減算'1 day'すると、クエリの対象となる日の一部が除外される可能性が高いタイムスタンプになります。ほとんどの人は丸一日でフィルタリングしたいので、now()::dateまたはを使用する必要CURRENT_DATEがあります。
tokenizer_fsj

9

これにより、現在の日付から1年を引いたものが得られます。

select now() - interval '1 year';

5

age()関数を使用して確認することもできます

select * from mytable where age( mydate, now() ) > '1 year';

age() 間隔を返します。

たとえばage( '2015-09-22', now() )戻ります-1 years -7 days -10:56:18.274131

postgresqlのドキュメントを参照


私は聞いていage()PostgreSQLの専用機能(2018年10月5日)である
loxaxs

IDとして質問@loxaxs
hd1
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.