iwantit
@iwantit

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

laravel8 postgres で異なるカラムで日付が該当するデータを取得したい

laravel8 postgres で異なるカラムで日付が該当するデータを取得したい

下記の画像のデータをday_from~day_toで該当するデータを取得したいです。

day_from(timestamp型) ←開始
day_to(timestamp型)  ←終わり

例えば今日 4/6 なら

Book1 - Excel 2022-04-06 15.13.52.png

id : 1 の 2022/4/5 2022/4/8

が取得できるイメージです。

何か方法はあるでしょうか?
どなたかお願いします。

0

1Answer

postgreSQL の環境が手元にないため確認はしておりませんが
下記のようなSQLでいけるかなと思いますので

SELECT
	* 
FROM
	table
WHERE
  -- 現在の日付が day_from と day_to の間
	CURRENT_DATE BETWEEN day_from AND day_to

Eloquent でしたら

Table::whereRaw('CURRENT_DATE BETWEEN day_from AND day_to');

でいかがでしょうか?

0Like

Comments

  1. @iwantit

    Questioner

    ありがとうございます!
    下記で想定通りの動きが出来ました。

    `
    Table::whereRaw('CURRENT_DATE BETWEEN day_from AND day_to');
    `

    因みになんですが

    CURRENT_DATE → 今日の日付

    だと思うんですが、
    これを現在時間で whereRawk句で判定は出来ますか?
    (timestampの為に日付と時間があるので)
  2. CURRENT_DATE -> CURRENT_DATETIME に変更すればOKです
  3. @iwantit

    Questioner

    エラーが出ました。

    `
    Illuminate\Database\QueryException
    SQLSTATE[42703]: Undefined column: 7 ERROR: column "current_datetime" does not exist LINE 1
    `
  4. 普段 MySQL なので一部ごっちゃになってしまいました、すみません

    CURRENT_TIMESTAMP ですね…
  5. @iwantit

    Questioner

    こちらこそ連投すみません。

    ありとうございました!

    時間が9時間前だとこの条件が動作するんですが、
    この「CURRENT_TIMESTAMP」の挙動でしょうか?

    それとも

    display_to timestamp(0) without time zone
    display_from timestamp(0) without time zone

    こっちでしょうか?
  6. @iwantit

    Questioner

    ご提示ありがとうございます。

    出来ればpostgresql.confを直さずに実現したいのですが
    何か方法はございますでしょうか?

    せっかく教えて頂いた「CURRENT_TIMESTAMP」以外の
    方法があればお願いします。
  7. それでしたら、あまり勧められた方法ではありませんが CURRENT_TIMESTAMP から 9時間前で比較するというのはいかがでしょうか


    Table::whereRaw("(CURRENT_TIMESTAMP + cast('-9 hours' as INTERVAL)) BETWEEN day_from AND day_to");
  8. @iwantit

    Questioner


    すいません。

    やはり教えて頂いたpostgresql.conf の timezone 変更で解決しました。
    ありとうございました!

Your answer might help someone💌