Sponsored Link
[MySQL]期間限定の抽出
期間を限定してデータを取得する
Ex)今月内に登録されたデータを取得
SELECT
`table`.`id`
FROM
`table`
WHERE
`table`.`c_date` BETWEEN DATE_FORMAT(CURDATE(), '%Y-%m-01') AND DATE_FORMAT(LAST_DAY(NOW()), '%Y-%m-%d 23:59:59'))
■補足
- 日付のみを表示(Y-m-d)
CURRENT_DATE = CURRENT_DATE() = CURDATE()
-
日付 + 時刻を表示(Y-m-d H:i:s)
ステートメントが実行を開始する時刻
CURRENT_TIMESTAMP() = CURRENT_TIMESTAMP = NOW()
ステートメントが実行された時刻 -
時刻を表示(H:i:s)
CURRENT_TIME() = CURRENT_TIME = CURTIME()
-
LAST_DAY
月の最終日を表示(Y-m-d) -
DATE_ADD
日付を加算する -
DATE_SUB
日付を減算する
■NOW()
と SYSDATE()
を実際に検証
# NOW()
SELECT NOW(), SLEEP(2), NOW();
# 結果
# 最初のNOW() 2019-10-09 11:22:22
# 最後のNOW() 2019-10-09 11:22:22
# SYSDATE()
SELECT SYSDATE(), SLEEP(2), SYSDATE();
# 結果
# 最初のSYSDATE() 2019-10-09 11:22:22
# 最後のSYSDATE() 2019-10-09 11:22:24
となる。
Ex)その他諸々のサンプル
mysql> SELECT '1997-12-31 23:59:59' + INTERVAL 1 SECOND;
-> '1998-01-01 00:00:00'
mysql> SELECT INTERVAL 1 DAY + '1997-12-31';
-> '1998-01-01'
mysql> SELECT '1998-01-01' - INTERVAL 1 SECOND;
-> '1997-12-31 23:59:59'
mysql> SELECT DATE_ADD('1997-12-31 23:59:59',
-> INTERVAL 1 SECOND);
-> '1998-01-01 00:00:00'
mysql> SELECT DATE_ADD('1997-12-31 23:59:59',
-> INTERVAL 1 DAY);
-> '1998-01-01 23:59:59'
mysql> SELECT DATE_ADD('1997-12-31 23:59:59',
-> INTERVAL '1:1' MINUTE_SECOND);
-> '1998-01-01 00:01:00'
mysql> SELECT DATE_SUB('1998-01-01 00:00:00',
-> INTERVAL '1 1:1:1' DAY_SECOND);
-> '1997-12-30 22:58:59'
mysql> SELECT DATE_ADD('1998-01-01 00:00:00',
-> INTERVAL '-1 10' DAY_HOUR);
-> '1997-12-30 14:00:00'
mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
-> '1997-12-02'
mysql> SELECT DATE_ADD('1992-12-31 23:59:59.000002',
-> INTERVAL '1.999999' SECOND_MICROSECOND);
-> '1993-01-01 00:00:01.000001'
■参考サイト
https://colo-ri.jp/develop/2010/11/mysqlsql.html
http://mysql.recipe123.net/man/sub/functions/function_date-add.html