在做某一个项目的时候,由于需要进行起始时间和结束时间这个时间段进行查询,当时也是查阅了很久,特记录笔记,方便日后查询
单表:
1.SELECT name,create_time FROM user_info WHERE create_time BETWEEN DATE('2019-12-12') AND DATE('2020-02-02');
2.SELECT name,create_time FROM user_info WHERE create_time >= DATE('2019-12-12') AND create_time <= DATE('2020-02-02');
多表联查:
SELECT
SUM(sell.`money`) AS sellMoney, DATE_FORMAT(sell.`create_time`,'%Y-%m-%d') AS sellStatsDate,
SUM(sell_reback.`money`) AS sellRebackMoney, DATE_FORMAT(sell_reback.`create_time`,'%Y-%m-%d') AS sellRebackStatsDate
FROM
sell
LEFT JOIN sell_reback
ON
DATE_FORMAT(sell.`create_time`,'%Y-%m-%d')=DATE_FORMAT(sell_reback.`create_time`,'%Y-%m-%d')
WHERE
and sell.`create_time` BETWEEN DATE(#{startTime}) AND DATE(#{endTime})
GROUP BY
DATE_FORMAT(sell.`create_time`,'%Y-%m-%d')
以上需要注意的地方:
DATE_FORMAT(具体时间字段,时间样式)
- 时间字段要具体到是哪个表时间字段
%Y-%m-%d
:查询的时间是有年月日的%Y-%m
:查询的时间是有年月的%Y
:查询的时间是有年的至于
#{startTime}、#{endTime}
中的startTime和endTime类型
- 字符串类型
如果想查询的是以年
,或者以年月
、再或者是以年月日
的形式
SQL语句的写法:
SELECT
SUM(sell.`money`) AS sellMoney, DATE_FORMAT(sell.`create_time`,'${value}') AS sellStatsDate,
SUM(sell_reback.`money`) AS sellRebackMoney, DATE_FORMAT(sell_reback.`create_time`,'${value}') AS sellRebackStatsDate
FROM
sell LEFT JOIN sell_reback ON DATE_FORMAT(sell.`create_time`,'${value}')=DATE_FORMAT(sell_reback.`create_time`,'${value}')
GROUP BY
DATE_FORMAT(sell.`create_time`,'${value}')
value值的类型是字符串,注意此刻使用的是'${value}',如果使用的是#,则将单引号去掉
如果想查询的一段时间为年与年之间
、或者年月与年月
之间、在或者年月日与年月日
之间
- 比如2017-2020之间
- 比如2019-03 —— 2019-09 之间
- 比如2020-01-10 —— 2020-04-20 之间
SELECT
SUM(sell.`money`) AS sellMoney,
DATE_FORMAT(sell.`create_time`,#{value}) AS sellStatsDate
FROM
sell
WHERE
sell.`create_time` BETWEEN DATE(#{startTime}) AND DATE(#{endTime})
GROUP BY
DATE_FORMAT(sell.`create_time`,#{value})
注意事项:
- startTime和endTime的数值必须是年-月-日的形式。比如要查询要查询2020-01-10 —— 2020-04-20 之间,那么startTime=“2020-01-10”,endTime=“2020-04-20”,即使要查询的是2019——2020之间的,也要以年-月-日的形式,由于主要寻找的是年份,所以月日就可以随意了
- 由于查询结果的返回值才是我们想要的,以年查询肯定结果只想要关于年的,不带日月的,所以这时候就需要value值,对于value值的定义上述已说明,所以只需要根据需求传入对应的值即可