vlambda博客
学习文章列表

Mysql时间函数的一些总结

前言:



这段时间,花了大把的时间进行了一个ETL任务调度监控的dashboard开发,开发过程中涉及了大量基于时间维度的sql查询,在写sql的过程中使用了大量的时间函数,在这里做一点记录。


This browser does not support music or audio playback. Please play it in WeChat or another browser.



常用的一些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_topicwhere help_topic_id < day(last_day(curdate()))order by help_topic_id————这个需求呢,来源于我需要先知道前一个月的所有时间,然后进行left join 当前不全的日期数据,来保证不全的日期数据的结果为0,而不是nullselect 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 &lt; 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语句中含有特殊字符需要转义,比如大于小于等字符,不转义就会报错啦。

<
<=
>
>=
&
'
"
&lt; &lt;= &gt; &gt;= &amp; &apos; &quot;


总结:



懈怠了一阵子,重新启程。Mysql时间函数的一些总结Mysql时间函数的一些总结

“朝着目标前进 路上总会有倦怠 走岔路的时候没关系 停下来 耽误点时间也没关系 保证路是对的就好 你回过头看以前自己为之纠结的事 以为过不去的坎 都会成为小事”