Mysql 常用时间函数(上)
也是做数据分析嘛, SQL 必然是每天都要用的, 然后在分析中, 时间是数据分析中极为重要的部分, 可以说是承上启下或者是贯穿整个分析. 比如, 日, 周, 月, 季度, 年度 与之相对应的 环比, 同比 等基础指标都是与时间相关的, 其重要性可见一斑. 虽然各个主流的商业数据库写法有差异, 但基本都差不多的, 这里就用 Mysql 作为演示了, 虽然主要用 IQ Sybase 这个列数据库更多一些.
然而往往这些时间字段, 都质量不高, 需要额外去处理, 比如, 字符串时间, 精确到秒的时间, 时间需要提取, 时间需要计算, 周, 月等各种操作. 每次是现查, 于是这里打算来小小整理一波, 也是做个笔记方便自己查. 就好比今天有个面谈, 问我 SVM 的目标函数, 推导啥的, 我的确是一点点推导过的, 但现场就是忘了, 一点也想不起来, 我觉得也没关系, 看下自己笔记, 然后一行行公式解释出来, 也是可以的嘛, 都是自己的笔记, 为啥就不能查阅下呢,面谈来整, 确实有点压力哦...
当前时刻 now()
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2020-07-16 23:30:15 |
+---------------------+
1 row in set (0.00 sec)
mysql> select curtime();
+-----------+
| curtime() |
+-----------+
| 23:30:09 |
+-----------+
1 row in set (0.00 sec)
当前日期 年-月-日 curdate( )
mysql> select curdate();
+------------+
| curdate() |
+------------+
| 2020-07-16 |
+------------+
1 row in set (0.00 sec)
将字符串时间转为 年-月-日 date( )
mysql> select date('2020-07-16');
+--------------------+
| date('2020-07-16') |
+--------------------+
| 2020-07-16 |
+--------------------+
mysql> select date('2020-07-16 22:22:22');
+-----------------------------+
| date('2020-07-16 22:22:22') |
+-----------------------------+
| 2020-07-16 |
+-----------------------------+
1 row in set (0.00 sec)
时间转字符串 date_format()
mysql> select date_format(now(), '%Y-%m-%d');
+--------------------------------+
| date_format(now(), '%Y-%m-%d') |
+--------------------------------+
| 20-07-16 |
+--------------------------------+
1 row in set (0.00 sec)
字符串转时间 str_to_date()
+------------------------------------------+
| str_to_date('2016-01-02', '%Y-%m-%d %H') |
+------------------------------------------+
| 2016-01-02 00:00:00 |
+------------------------------------------+
1 row in set (0.00 sec)
时间 / 时间戳互转
mysql> select unix_timestamp(now());
+-----------------------+
| unix_timestamp(now()) |
+-----------------------+
| 1594914762 |
+-----------------------+
1 row in set (0.00 sec)
mysql> select from_unixtime(1594914762);
+---------------------------+
| from_unixtime(1594914762) |
+---------------------------+
| 2020-07-16 23:52:42 |
+---------------------------+
1 row in set (0.02 sec)
字符串 / 时间戳互转
mysql> select unix_timestamp('2020-07-16');
+------------------------------+
| unix_timestamp('2020-07-16') |
+------------------------------+
| 1594828800 |
+------------------------------+
1 row in set (0.00 sec)
mysql> select from_unixtime(1594828800, '%Y-%d');
+------------------------------------+
| from_unixtime(1594828800, '%Y-%d') |
+------------------------------------+
| 2020-16 |
+------------------------------------+
1 row in set (0.00 sec)
mysql> select from_unixtime(1594828800, '%Y-%m-%d');
+---------------------------------------+
| from_unixtime(1594828800, '%Y-%m-%d') |
+---------------------------------------+
| 2020-07-16 |
+---------------------------------------+
1 row in set (0.00 sec)
给时间加一个增量 date_add( ) 和 adddate( )
- ADDDATE(date, INTERVAL expr, unit)
mysql> select date_add('2020-07-16', interval 10 day);
+-----------------------------------------+
| date_add('2020-07-16', interval 10 day) |
+-----------------------------------------+
| 2020-07-26 |
+-----------------------------------------+
mysql> select date_add('2020-07-16', interval 1 week);
+-----------------------------------------+
| date_add('2020-07-16', interval 1 week) |
+-----------------------------------------+
| 2020-07-23 |
+-----------------------------------------+
1 row in set (0.00 sec)
mysql> select date_add('2020-07-16', interval 1 month);
+------------------------------------------+
| date_add('2020-07-16', interval 1 month) |
+------------------------------------------+
| 2020-08-16 |
+------------------------------------------+
1 row in set (0.00 sec)
如果不指定时间间隔, 则默认单位为 day
+-------------------------+
| adddate('2020-7-16', 4) |
+-------------------------+
| 2020-07-20 |
+-------------------------+
1 row in set (0.00 sec)
mysql> select adddate(curdate(), 4);
+-----------------------+
| adddate(curdate(), 4) |
+-----------------------+
| 2020-07-20 |
+-----------------------+
1 row in set (0.00 sec)
加法和减法, 其实都是加法.
mysql> select adddate(curdate(), -4);
+------------------------+
| adddate(curdate(), -4) |
+------------------------+
| 2020-07-12 |
+------------------------+
1 row in set (0.02 sec)
mysql> select adddate(curdate(), -33);
+-------------------------+
| adddate(curdate(), -33) |
+-------------------------+
| 2020-06-13 |
+-------------------------+
1 row in set (0.00 sec)
一定要写减, 用 date_sub(date, INTERVAL expr unit) 也行, 强迫症的话.
mysql> select date_sub('2020-7-16', interval 4 day);
+---------------------------------------+
| date_sub('2020-7-16', interval 4 day) |
+---------------------------------------+
| 2020-07-12 |
+---------------------------------------+
1 row in set (0.00 sec)
mysql> select date_sub('2020-7-16', interval 33 day);
+-----------------------------------------+
| date_sub('2020-7-16', interval 33 day) |
+-----------------------------------------+
| 2020-06-13 |
+-----------------------------------------+
1 row in set (0.00 sec)
计算日期是当年的第几周 week( )
- week(date, mode)
mysql> select week('2020-01-05');
+--------------------+
| week('2020-01-05') |
+--------------------+
| 1 |
+--------------------+
1 row in set (0.00 sec)
mysql> select week(date('2020-01-05'));
+--------------------------+
| week(date('2020-01-05')) |
+--------------------------+
| 1 |
+--------------------------+
1 row in set (0.00 sec)
mysql 是正常的, 一周是从 周1 到周天. 而像 IQ Sybase 就是西式的. 然后要自己写一个 case when.
-- IQ
set datefirst 1;
select
case
when datepart(weekday, 日期字段) = 7
then datepart(week, dateadd(day, -1, 日期字段))
else
datepart(week, 日期字段)
end as date_week
日期是周几 dayname(date) 和 dayofweek(date)
mysql> select dayname('2020-07-16');
+-----------------------+
| dayname('2020-07-16') |
+-----------------------+
| Thursday |
+-----------------------+
1 row in set (0.00 sec)
mysql> select dayofweek('2020-07-16');
+-------------------------+
| dayofweek('2020-07-16') |
+-------------------------+
| 5 |
+-------------------------+
1 row in set (0.00 sec)
这个返回天还是有点问题, 中国人看应该返回 4 才对, 它又是从 周天开始算的, 我有点懵逼...
**日期是一月 or 年的第多少天 dayofmonth(); dayofyear(); **
mysql> select dayofmonth('2020/7/16');
+-------------------------+
| dayofmonth('2020/7/16') |
+-------------------------+
| 16 |
+-------------------------+
1 row in set (0.00 sec)
mysql> select dayofyear('2020-7-16');
+------------------------+
| dayofyear('2020-7-16') |
+------------------------+
| 198 |
+------------------------+
1 row in set (0.00 sec)
计算两个日期的差 datediff ( )
- datediff (data_01, date_02) 返回 date_01 - date_02 相差的天数
mysql> select datediff('2020-7-16', '2020-07-01');
+-------------------------------------+
| datediff('2020-7-16', '2020-07-01') |
+-------------------------------------+
| 15 |
+-------------------------------------+
1 row in set (0.00 sec)
mysql> select datediff('2020-7-16', '2020-07-20');
+-------------------------------------+
| datediff('2020-7-16', '2020-07-20') |
+-------------------------------------+
| -4 |
+-------------------------------------+
1 row in set (0.00 sec)
mysql> select datediff('2020-7-16', '2020-01-1');
+------------------------------------+
| datediff('2020-7-16', '2020-01-1') |
+------------------------------------+
| 197 |
+------------------------------------+
1 row in set (0.00 sec)
计算日期当月的最后一天 last_day(date)
mysql> select last_day('2020-07-16');
+------------------------+
| last_day('2020-07-16') |
+------------------------+
| 2020-07-31 |
+------------------------+
1 row in set (0.00 sec)
mysql> select last_day(now());
+-----------------+
| last_day(now()) |
+-----------------+
| 2020-07-31 |
+-----------------+
1 row in set (0.00 sec)
mysql> select last_day('2020-2-1');
+----------------------+
| last_day('2020-2-1') |
+----------------------+
| 2020-02-29 |
+----------------------+
1 row in set (0.00 sec)
Mysql 常用时间函数(上)的更多相关文章
- MySQL常用时间函数
官方文档:Date and Time Functions Name Description ADDDATE() Add time values (intervals) to a date value ...
- mysql常用时间函数与类型转换
一.用到的函数有: 1.时间格式化函数 DATE_FORMAT(date,format) 2.时间加减函数DATE_ADD(date,INTERVAL expr unit)DATE_SUB(date ...
- Mysql常用时间函数的用法和应用
/* ---1)整型时间戳转换为date的格式(yyyymmdd, yyyy年mm月dd)--*/ , '%Y%m%d' ); -- 20090806 , '%Y年%m月%d' ); -- 2009年 ...
- MySql 常用时间函数
1.date() 提取日期或日期时间表达式的日期部分 select date(create_time) from blog_article; 2.date_format() select date_f ...
- mysql时间类型总结及常用时间函数
日期时间和类型 常用日期和时间类型 字节 year 1 表示年份 值范围:(1901----2155) date ...
- PLSQL常用时间函数
body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...
- MySQL日期时间函数大全(转)
MySQL日期时间函数大全 DAYOFWEEK(date) 返回日期date是星期几(1=星期天,2=星期一,……7=星期六,ODBC标准)mysql> select DAYOFWEEK('1 ...
- 【转】MySQL日期时间函数大全
MySQL日期时间函数大全 1.DAYOFWEEK(date) 返回日期date是星期几(1=星期天,2=星期一,……7=星期六,ODBC标准)mysql> select DAYOFWEEK( ...
- [转]MySQL常用Json函数和MySQL常用字符串函数
MySQL常用Json函数:https://www.cnblogs.com/waterystone/p/5626098.html MySQL常用字符串函数:https://www.cnblogs.co ...
- Lua常用时间函数
常用时间函数 print(os.time()) --当前系统时间值 print(os.date( print(os.date("*t"), os.time()) --当前系统时间表 ...
随机推荐
- 解锁 DeepSeek 的高效秘籍:技术人员的进阶技巧
DeepSeek 作为一款强大的代码搜索引擎,能够帮助开发者快速定位代码.解决疑难问题,甚至学习前沿技术.但想要真正释放其潜力,必须掌握以下核心技巧.本文将通过重点标注,直击高效使用 DeepSeek ...
- 在鹅厂做java开发是什么体验
离职已有好几个月,准备写一篇关于之前在腾讯做Java开发的经历,现在来谈谈在Java领域里,在腾讯做Java开发的体验.随便写写别较真. 首先,介绍一下腾讯里与Java相关的部门.主要有CDG(云与智 ...
- 迅速理解 LCS 最长公共子序列问题
在算法与数据结构的经典问题中,最长公共子序列(Longest Common Subsequence,简称 LCS)问题占据着重要的地位.给定两个序列,我们需要找到它们最长的公共子序列,而子序列要求保持 ...
- BGP路由优选原则
0 丢弃下一跳不可达的路由 1 优选Preference_Value值最高的路由(本设备有效) Pref-Val:协议首选值 华为私有的属性,只具有本地(本设备)意义,缺省情况下为0,越大越优,0-6 ...
- 【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(10)
1.问题描述: 离线推送,锁屏的时候没有弹出消息,只有下拉在通知中心里面显示.请问是否是正常的? 解决方案: 检查一下是否存在图片风控:https://developer.huawei.com/con ...
- RAFT光流估计
RAFT Introduction RAFT: Recurrent All-Pairs Field Transforms for Optical Flow:观其名便知道这是一篇关于光流估计的论文. 模 ...
- 【SpringCloud】微服务架构编码构建
微服务架构编码构建 约定>配置>编码 Mysql的主从 slave会从master读取binlog来进行数据同步 三步骤+原理图 MySQL复制过程分成三步: master将改变记录到二进 ...
- 【软件】解决奥林巴斯生物显微镜软件OlyVIA提示“不支持您使用的操作系统”安装中止的问题
[软件]解决奥林巴斯生物显微镜软件OlyVIA提示"不支持您使用的操作系统"安装中止的问题 零.问题 资源在文末 问题如下,从奥林巴斯生物显微镜软件官网下载地址:https://l ...
- golang实现命令行程序的使用帮助
通过flag包我们可以很方便的实现命令行程序的参数标志, 接下来我们来看看如何实现命令行程序的使用帮助, 通常以参数标志-h或--help的形式来使用. 自动生成使用帮助 我们只需要声明其他参数标志, ...
- FastAPI 核心安全功能与模板渲染的完整示:登录、CSRF、JWT、会话、认证和缓存功能
以下是一个整合 FastAPI 核心安全功能与模板渲染的完整示例,基于多个技术文档的最佳实践,包含登录.CSRF.JWT.会话.认证和缓存功能: from datetime import dateti ...