这两天运营有需求,需要按照每周来统计表的数据。想想看如果自己统计每周数据,还要按周来查询,然后做union,有没有方便的函数呢?查了下,Mysql提供了week函数,可以方便的从日期中获取到周次,这样一来,便可以在分组时,按照week来分组,如group by week(create_time)。顺便整理了下,日常可能用到的一些时间函数,方便日后使用。
SELECT
-- 获取当前执行时间,包含日期
NOW()
-- 获取当前执行日期
, CURDATE()
-- 获取当前执行时间,没有日期
, CURTIME()
-- 获取当前执行日期2
, DATE(NOW())
-- 格式化成 2017-05-16 00:18:32 大Y,和大H,其他小写
, DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s')
-- 或者用 大T来表达24小时制
, DATE_FORMAT(NOW(), '%Y-%m-%d %T')
-- 周次,周日作为每周的第一周,等价DATE_FORMAT(NOW(), '%U') 或 EXTRACT(WEEK FROM NOW())
, WEEK(NOW(),2)
-- 周次,周一作为每周的第一周,等价DATE_FORMAT(NOW(), '%u')
, WEEK(NOW(),3)
-- 抽取月次
, EXTRACT(MONTH FROM NOW())
-- 星期索引 0 周一 1 周二 ... 6 周天
, WEEKDAY(NOW())
-- 获取系统时间,区别于前面的执行时间
, SYSDATE()
, SLEEP(1)
-- 再获取系统时间,会间隔1s
, SYSDATE()
-- 时间差,天数用day,后面减去前面 还可以是 FRAC_SECOND、SECOND、 MINUTE、 HOUR、 DAY、 WEEK、 MONTH、 QUARTER或 YEAR
, TIMESTAMPDIFF(DAY,'2017-05-16 21:06:00','2017-05-16 21:06:50') TIMESTAMPDIFFResult
-- 日期差,前面减后面
, DATEDIFF('2008-12-30','2008-12-29')
-- 增加天数
, DATE_ADD(NOW(), INTERVAL 1 DAY)
-- 减去天数
, DATE_SUB(NOW(), INTERVAL 1 DAY)
-- 获取是一年中的第几天,从1开始
, DAYOFYEAR(NOW())
-- 获取是一月中的第几天,从1开始
, DAYOFMONTH(NOW())
-- 获取是一周中的第几天,从周天开始
, DAYOFWEEK(NOW())
-- 获取每年第一天
, DATE_SUB(CURDATE(), INTERVAL DAYOFYEAR(NOW())-1 DAY)
-- 获取某日期后第几周
, DATE_ADD('2017-01-01', INTERVAL 2 WEEK)
;
执行结果: