Mysql时间函数的一些总结
前言:
这段时间,花了大把的时间进行了一个ETL任务调度监控的dashboard开发,开发过程中涉及了大量基于时间维度的sql查询,在写sql的过程中使用了大量的时间函数,在这里做一点记录。
常用的一些Mysql时间函数
常用:
CURDATE() | 获取当前日期 |
CURTIME() | 获取当前时间 |
NOW() | 获取当前时间与日期 |
UNIX_TIMESTAMP(date) | 获取日期的UNIX时间戳 |
FROM_UNIXTIME() | 获取UNIX时间戳的日期值 |
WEEK(date) | 返回日期date为一年中的第几周 |
YEAR(date) | 返回date的年份 |
HOUR(time) | 返回时间time的小时值 |
MINUTE(time) | 返回时间time的分钟值 |
MONTHNAME(date) | 返回时间date的英文月份 |
EXTRACT(unit FROM date) | 从日期中抽取出某个单独的部分或组合 (SELECT now(),extract(YEAR_MONTH FROM now())-- 年月) |
TIMEDIFF(expr1, expr2) | 返回两个日期相减(expr1 − expr2 )相差的时间数(两个参数类型必须相同) |
DATEDIFF(expr1, expr2) | 返回两个日期相减(expr1 − expr2 )相差的天数 |
DATE_FORMAT(date,fmt) | 日期格式化为字符 |
日期时间运算函数:
分别为给定的日期date加上(add)或减去(sub)一个时间间隔值expr
格式:
DATE_ADD(date, INTERVAL expr unit);
DATE_SUB(date, INTERVAL expr unit);
interval是间隔类型关键字
expr是一个表达式,对应后面的类型
unit是时间间隔的单位(间隔类型)(20个)
HOUR 小时 MINUTE 分
SECOND 秒 MICROSECOND 毫秒
YEAR 年 MONTH 月
DAY 日 WEEK 周
QUARTER 季 YEAR_MONTH 年和月
DAY_HOUR 日和小时 DAY_MINUTE 日和分钟
DAY_ SECOND 日和秒 HOUR_MINUTE 小时和分
HOUR_SECOND 小时和秒 MINUTE_SECOND 分钟和秒
举例:
DATE_SUB(CURDATE(), INTERVAL 1 DAY) --昨天 2020-07-17 时间戳:UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 DAY))
DATE_SUB(CURDATE(), INTERVAL 1 WEEK) --一周前 时间戳:UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 WEEK))
DATE_SUB(CURDATE(), INTERVAL 1 MONTH) --一月前 时间戳:UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))
DATE_SUB(CURDATE(), INTERVAL 1 YEAR) --一年前 时间戳:UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 YEAR
Mysql如何获取一个月每天的日期
干货:
select
date_add(curdate(), interval(cast(help_topic_id as signed integer) - 30) day) day
from mysql.help_topic
where help_topic_id < day(last_day(curdate()))
order by help_topic_id
————这个需求呢,来源于我需要先知道前一个月的所有时间,然后进行left join 当前不全的日期数据,来保证不全的日期数据的结果为0,而不是null。
select
st.day as dayTime,
IFNULL(st2.trendScheduling, 0) trendScheduling
from
(
select
date_add(
curdate(),
interval(cast(help_topic_id as signed integer) - 30) day
) day
from
mysql.help_topic
where
help_topic_id < day(last_day(curdate()))
order by
help_topic_id
) st
left join(
。。。。。省略
)st2 on st2.dayTime=st.day order by st.day asc
注意:
help_topic是mysql库下的一张表,但是你可能没有这张表的权限。
解决方法:
可以执行该SQL:GRANT SELECT ON mysql.help_topic TO '用户'@'源'(给用户赋权限);
取消用户权限SQL:REVOKE SELECT ON mysql.help_topic FROM '用户'@'源';
补充:mybatis中常用符号的转义
在myBatis的xml配置文件中,SQL语句中含有特殊字符需要转义,比如大于小于等字符,不转义就会报错啦。
< |
<= |
> |
>= |
& |
' |
" |
< | <= | > | >= | & | ' | " |
总结:
懈怠了一阵子,重新启程。
“朝着目标前进 路上总会有倦怠 走岔路的时候没关系 停下来 耽误点时间也没关系 保证路是对的就好 你回过头看以前自己为之纠结的事 以为过不去的坎 都会成为小事”