プロが教える店舗&オフィスのセキュリティ対策術

postgreSQLの構文内で今月の頭(1日)や先月の頭(1日)や先月の末日を変数として出力する方法を教えてください。
※データのテーブルは添付参照

もちろん日付を意図して指定しての構文はできるのですが、汎用的に作成したくご相談させてください。
①今月の頭の算出はあまり浮かんでいないです。
②先月の頭は今月の頭-1(月の方を引く) 例 2021-09-01.000 -1ヶ月 = 2021-08-01.000
③先月の末は今月の頭-1(月の方を引く) 例 2021-09-01.000 -1秒 = 2021-08-30.xxx

また、ここで得られた構文をselectの中に埋め込みたいです。

select
*
from
eample_table
where
date >= '②'
and
date <= '③';

このような構文を作ることは可能でしょうか。

以上、よろしくお願いいたします。

「postgreSQLの日付を変数にする方」の質問画像

A 回答 (1件)

マニュアル、読んだことありますか?


https://www.postgresql.jp/document/12/html/index …

9.9. 日付/時刻関数と演算子
https://www.postgresql.jp/document/12/html/funct …
に日付関連の演算や関数がサンプルと一緒に載っています。
これを一通り読むだけで、複数のアイディアが思い浮ぶのではないでしょうか?


たとえば
ある日付を含む月の最初の日を求める方法
・「ある日付」 - (「ある日付の『日』」-1)日 を計算する
・(「ある日付」の『年』)年(「ある日付」の『月』)月1日 を作る
・「ある日付」を『月』で切り捨てる


判定の方も、「8/31 23:59:59以前」だと「8/31 23:59:59.1」が範囲外になります。
この場合は
・時刻込みのdate列ではなく、そこから日付部分だけを抜き出す
・「最終日以前」ではなく「次月の1日0時0分より前」にする
等の対策があります。

また
「列dateを含む月の最初の日」= 指定月の最初の日
とすれば範囲で考える必要がなくなります。
「列dateの『年』」= 指定年 and 「列dateの『月』」= 指定月
というやり方もあります。




どの方法がいいかは、最終的に何がしたいかにもよるので、いろいろ考えてみましょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す