MySQL 中常用的函数
一、DATE_FORMAT()
需求:按照日期月份统计数据,但数据库存储的格式是 '2020-10-01 10:20:45' ,因此需要格式化日期
语法:
DATE_FORMAT(date,format)
第一个参数:指定的日期,第二个参数:需要获取的格式
| 格式符 | 说明 |
| %a |
工作日的缩写名称 (Sun..Sat) |
| %b |
月份的缩写名称 (Jan..Dec) |
| %c |
月份,数字形式(0..12) |
| %D |
带有英语后缀的该月日期 (0th, 1st, 2nd, 3rd, ...) |
| %d |
该月日期, 数字形式 (00..31) |
| %e |
该月日期, 数字形式(0..31) |
| %f |
微秒 (000000..999999) |
| %H |
小时(00..23) |
| %h |
小时(01..12) |
| %I |
小时 (01..12) |
| %i |
分钟,数字形式 (00..59) |
| %j |
一年中的第几天 (001..366) |
| %k |
小时 (0..23) |
| %l(小写L) |
小时 (1..12) |
| %M |
月份名称 (January..December) |
| %m |
月份, 数字形式 (00..12) |
| %p |
上午(AM)或下午( PM) |
| %r |
获得时间 ,例如 (10: 11: 43 AM) |
| %S |
秒 (00..59) |
| %s |
秒 (00..59) |
| %T |
时间 , 例如 (10:11:43 不加AM或PM) |
| %U | 周 (00..53), 其中周日为每周的第一天 |
| %u | 周 (00..53), 其中周一为每周的第一天 |
| %V |
周 (01..53), 其中周日为每周的第一天 ; 和 %X同时使用 |
| %v |
周 (01..53), 其中周一为每周的第一天 ; 和 %x同时使用 |
| %W |
工作日名称 (周日..周六) |
| %w |
一周中的每日 (0=周日..6=周六) |
| %X |
该周的年份,其中周日为每周的第一天, 数字形式,4位数;和%V同时使用 |
| %x |
该周的年份,其中周一为每周的第一天, 数字形式,4位数;和%v同时使用 |
| %Y |
年份, 数字形式,4位数 |
| %y |
年份, 数字形式 (2位数) |
| %% |
‘%’文字字符 |
此外,DATE_FORMAT() 函数还可以将指定的格式组合起来写
比如:
SELECT DATE_FORMAT('2019-03-09 10:18:37','%Y-%m-%d')
返回:2019-03-09
SELECT DATE_FORMAT('2019-03-09 10:18:37','%Y年%m月%d日')
返回:2019年03月09日
例如:获取日期的月份

select DATE_FORMAT(createTime,'%m') from user

1.查询某年某月某日的数据(主语字符区分大小写)
select * from t_emp WHERE DATE_FORMAT(birthday, '%Y-%m-%d' ) = '2020-11-02';
参考:
https://www.w3school.com.cn/sql/func_date_format.asp
https://blog.csdn.net/weixin_30652879/article/details/97258860
二、concat()
在执行模糊查询的SQL 语句中会用到 ‘%’ 拼接,如果是字符串可能会引入 SQL 注入,使用占位符则需要将注入的值与 '%' 拼接 ,用法如下
SELECT * FROM USER WHERE NAME LIKE concat( '%', '张', '%' )
三、TO_DAYS()

1.查询今天过生日的人(今天2020-11-04)
SELECT * FROM t_emp WHERE TO_DAYS( birthday ) = TO_DAYS( CURDATE( ) )
2.查询昨天过生日的人(如果要包含今天改为小于等于)
SELECT * FROM t_emp WHERE TO_DAYS(CURDATE()) - TO_DAYS(birthday) = 1
四、DATE_SUB()
1.查询最近7天的数据(包含今天)
SELECT * FROM t_emp WHERE birthday > DATE_SUB( CURDATE(), INTERVAL 7 DAY )
五、year / month
1.查询今年的数据
select * from t_emp WHERE YEAR(birthday) = year(CURDATE());
2.查询某个月份的数据(只考虑月份)
select * from t_emp WHERE MONTH(birthday) = 11;
六、quarter()
1.查询本季度的数据
select * from t_emp WHERE QUARTER(birthday) = QUARTER(CURDATE())
2.查询上季度的数据
select * from t_emp WHERE QUARTER(CURDATE()) - QUARTER(birthday) =1

浙公网安备 33010602011771号