开发过程中,我们经常需要查询查询数据库中符合指定日期条件的数据,如当日,昨日,一周内,一月内的数据,以下为mysql中查询指定日期的方式。包含date datetime varchar 三种日期类型用法
字段说明:sign_date 为date类型
rec_crt_ts 为datatime类型
sign_begin_time 为varchar类型
TO_DAYS() 函数用法为返回从年份0开始的天数
-- 查询当日的数据 rec_crt_ts 类型为datetime
SELECT * FROM `tbl_task_sign_sub_acct` WHERE TO_DAYS(NOW()) = TO_DAYS(rec_crt_ts);
-- 查询当日的数据 sign_date 类型为date
SELECT * FROM `tbl_task_sign_sub_acct` WHERE TO_DAYS(NOW()) = TO_DAYS(sign_date);
-- 查询当日的数据 sign_begin_time类型为varchar
SELECT * FROM `tbl_task_sign_sub_acct` WHERE TO_DAYS(NOW()) = TO_DAYS(sign_begin_time);
-- 查询昨日的数据 rec_crt_ts 类型为datetime
SELECT * FROM `tbl_task_sign_sub_acct` WHERE TO_DAYS(NOW()) - TO_DAYS(rec_crt_ts) = 1;
-- 查询昨日的数据 sign_date 类型为date
SELECT * FROM `tbl_task_sign_sub_acct` WHERE TO_DAYS(NOW()) - TO_DAYS(sign_date) = 1;
-- 查询昨日的数据 sign_begin_time类型为varchar
SELECT * FROM `tbl_task_sign_sub_acct` WHERE TO_DAYS(NOW()) - TO_DAYS(sign_begin_time) = 1;
DATE_SUB(d,INTERVAL expr type)函数用法
DATE_SUB(d,INTERVAL expr type)函数返回起始日期d减去一个时间段后的日期。
expr是一个表达式,用来指定从起始日期添加或减去的时间间隔值。
expr是一个字符串。对于负值的时间间隔,它可以用一个负号“-”开头。
expr表达式与后面的间隔类型type对应。
MySQL中的日期间隔类型如下表所示:
-- 查询7日内的数据,包含今日 sign_date 类型为date
SELECT * FROM tbl_task_sign_sub_acct where DATE_SUB(CURDATE(), INTERVAL 7 DAY) < date(sign_date);
-- 查询7日内的数据,包含今日 rec_crt_ts 类型为datetime
SELECT * FROM tbl_task_sign_sub_acct where DATE_SUB(CURDATE(), INTERVAL 7 DAY) < date(rec_crt_ts);
-- 查询7日内的数据,包含今日 sign_begin_time类型为varchar
SELECT * FROM tbl_task_sign_sub_acct where DATE_SUB(CURDATE(), INTERVAL 7 DAY) < date(sign_begin_time);
--查询指定日期近7日的数据,包含今日 date datetime varchar 类型通用
SELECT * FROM tbl_task_sign_sub_acct where DATE_SUB('2022-02-18', INTERVAL 7 DAY) < date(sign_date);
-- 查询本月内的数据 sign_date 类型为date
SELECT * FROM `tbl_task_sign_sub_acct` WHERE DATE_FORMAT(sign_date, '%Y%m') = DATE_FORMAT(CURDATE(), '%Y%m');
-- 查询本月内的数据 rec_crt_ts 类型为datetime
SELECT * FROM `tbl_task_sign_sub_acct` WHERE DATE_FORMAT(rec_crt_ts, '%Y%m') = DATE_FORMAT(CURDATE(), '%Y%m');
-- 查询本月内的数据 sign_begin_time为varchar
SELECT * FROM `tbl_task_sign_sub_acct` WHERE DATE_FORMAT(sign_begin_time, '%Y%m') = DATE_FORMAT(CURDATE(), '%Y%m');
-- 查询上个月的数据 date datetime varchar 类型一样的用法,均可用此sql
SELECT * FROM `tbl_task_sign_sub_acct` WHERE PERIOD_DIFF(DATE_FORMAT(NOW(),'%Y%m'),DATE_FORMAT(sign_begin_time,'%Y%m')) =1;
-- 查询本季度的数据 date datetime varchar 类型一样的用法,均可用此sql
SELECT * FROM `tbl_task_sign_sub_acct` WHERE QUARTER(sign_date)=QUARTER(NOW());
-- 查询上季度的数据 date datetime varchar 类型一样的用法,均可用此sql
SELECT * FROM `tbl_task_sign_sub_acct` WHERE QUARTER(sign_date)=QUARTER(DATE_SUB(NOW(),INTERVAL 1 QUARTER));
-- 查询今年的数据 date datetime varchar 类型一样的用法,均可用此sql
SELECT * FROM `tbl_task_sign_sub_acct` WHERE YEAR(sign_date)=YEAR(NOW());
-- 查询上一年的数据 date datetime varchar 类型一样的用法,均可用此sql
SELECT * FROM `tbl_task_sign_sub_acct` WHERE YEAR(sign_date)=YEAR(DATE_SUB(NOW(),INTERVAL 1 YEAR));