現在の時間の始まりを取得する正しい方法は次のとおりです。
SUBDATE(SUBDATE(SUBDATE(NOW(),
INTERVAL EXTRACT(MICROSECOND FROM NOW()) MICROSECOND),
INTERVAL EXTRACT(SECOND FROM NOW()) SECOND),
INTERVAL EXTRACT(MINUTE FROM NOW()) MINUTE))
したがって、完全な時間範囲を取得するには、次のようにします
SUBDATE(SUBDATE(SUBDATE(SUBDATE(NOW(),
INTERVAL EXTRACT(MICROSECOND FROM NOW()) MICROSECOND),
INTERVAL EXTRACT(SECOND FROM NOW()) SECOND),
INTERVAL EXTRACT(MINUTE FROM NOW()) MINUTE),
INTERVAL 1 HOUR) <= my_date
AND my_date < SUBDATE(SUBDATE(SUBDATE(NOW(),
INTERVAL EXTRACT(MICROSECOND FROM NOW()) MICROSECOND),
INTERVAL EXTRACT(SECOND FROM NOW()) SECOND),
INTERVAL EXTRACT(MINUTE FROM NOW()) MINUTE)
これは実際には非常に面倒なので、データ型の純度にあまり関心がない場合は、書式設定のトリックを使用して現在の時間を取得します。
STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H') <= my_date
AND my_date <= ADDDATE(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL 1 HOUR)
およびその前の時間:
SUBDATE(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL 1 HOUR) <= my_date
AND my_date < STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H')
現在の日:
STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d'), '%Y%m%d') <= my_date
AND my_date <= ADDDATE(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d'), '%Y%m%d'), INTERVAL 1 DAY)
そして前日:
SUBDATE(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d'), '%Y%m%d'), INTERVAL 1 DAY) <= my_date
AND my_date < STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d'), '%Y%m%d')
現在の月:
STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m'), '%Y%m') <= my_date
AND my_date <= ADDDATE(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m'), '%Y%m'), INTERVAL 1 MONTH)
および前月:
SUBDATE(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m'), '%Y%m'), INTERVAL 1 MONTH) <= my_date
AND my_date < STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m'), '%Y%m')