アプリ版:「スタンプのみでお礼する」機能のリリースについて

SQL 文勉強中です。

以下で、本日登録したレコードの取得が出来ませんでした。
BETWEEN DATE_ADD(date(now()), interval -1 week) and date(now())';

以下で、本日登録したレコードの取得が出来ました。
BETWEEN DATE_ADD(now(), interval -1 week) and now()';

何故、本日のレコードが取得できないかが、わかりませんでした。

わかる方おりましたら、ご教授下さい。

宜しくお願いいたします。

A 回答 (1件)

A BETWEEN B AND C は (B<=A AND A<=C ) の意味です。


質問の中に「A」にあたるものが有りません。
「A」がわからなければ、何が原因かなど、わかるわけがありません。


SELECT A, DATE_ADD(date(now()), date(now()), DATE_ADD(now(), interval -1 week), now() FROM 〜
等として、比較対象、BETWEENの前後 を取得するようなSELECTを実行して、各値がどんな関係になっているか確認しましょう。



二つのBETWEEN の違いは now()か date(now()) か、です。
ここが原因になっていると考えるのが妥当です。
違いは now()は現在日時、 date(now())は、now()(現在日時) を日付だけに変換したもの、ということです。
日付だけ、というのは、 0時0分扱いになります。

ということで、もし、比較対象が「時刻」まで含んだデータだとすると、例えば
 7/29 10:00 に登録
 now()= 7/29 11:00 にSELECTを実行
→ date(now()) = 7/29 0:00 < 7/29 10:00 なので、BETWEENの対象外
ということが発生します。
    • good
    • 0
この回答へのお礼

ご回答頂きありがとうございました。
詳しく書いて頂いたので勉強になりました。

お礼日時:2019/07/30 01:52

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