Mysql 常用时间函数(上)

Mysql 常用时间函数(上) 也是做数据分析嘛, SQL 必然是每天都要用的, 然后在分析中, 时间是数据分析中极为重要的部分, 可以说是承上启下或者是贯穿整个分析. 比如, 日, 周, 月, 季度, 年度 与之相对应的…

	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)

代码100分

当前日期 年-月-日 curdate( )

代码100分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         |
+--------------------+
代码100分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 常用时间函数(上)

原文地址:https://www.cnblogs.com/chenjieyouge/p/13326590.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/7355.html

(0)
上一篇 2023-03-21
下一篇 2023-03-21

相关推荐

  • Python LabelGrid:打造高效数据标注工具

    Python LabelGrid:打造高效数据标注工具Python LabelGrid是一款开源的数据标注工具,它提供了一种简单易用的方式来标注各种类型的数据,如图像、文本、音频等等。它的目标是打造一款高效、灵活、可扩展的工具,帮助开发者快速完成各种数据标注任务。

    2024-01-10
    71
  • 大数据批量键值查询怎样才会更快

    大数据批量键值查询怎样才会更快一般选择数据库来存放数据,并借助数据表的索引来加快检索速度。利用索引查找数据,即使数据总量达到有10亿,对于单条记录的查找效率大约在数十毫秒(复杂度为LogN)。但是,如果需要查询的键值很多,比如多…

    2023-03-12
    101
  • 电脑远程连接 服务器群控

    电脑远程连接 服务器群控电脑远程连接 服务器群控远程桌面是微软公司为了便于网络管理员管理维护服务器推出的一项服务。从windows 2000 server版本开始引入,网络管理员时候远程桌面连接器连接到网络任意一台开启了远…

    2023-02-24
    98
  • 关于测试开发之python的信息

    关于测试开发之python的信息软件测试人员能用python做的事情很多,最常见的就是下面四项:1)做自动化测试【web自动化,app自动化,接口自动化】;2)做性能测试;3)开发小工具;4)搭建测试平台。

    2023-10-31
    72
  • Python Dictionary:用途广泛的数据类型解析工具

    Python Dictionary:用途广泛的数据类型解析工具Python作为一门强大的编程语言,有许多内置数据类型,其中字典(Dictionary)是一个广泛使用的数据类型。字典是一个无序、可变、有键、唯一性的集合。字典用键值对来存储数据,通过键来访问值。字典的灵活性使其成为解析数据的有用工具。本文将介绍字典的各种特性,并给出实际应用的示例。

    2024-03-26
    26
  • PostgreSQL 电子围栏的应用场景和性能

    PostgreSQL 电子围栏的应用场景和性能PostgreSQL , 电子围栏 , 共享自行车 , 共享充电宝 , 共享xxx , 菜鸟 , 航空管制 , 无人飞行器 , pipelinedb , 流式计算

    2023-06-15
    103
  • redis怎么做分页「建议收藏」

    redis怎么做分页「建议收藏」redis的SortedSet中的指令ZREVRANGE key start stop又可以返回指定区间内的成员,可以用来做分页;List中的LRANGE key start stop指令也能做到分…

    2022-12-20
    109
  • shut immediate 数据库遭遇 ORA-24324 ORA-24323 参考学习

    shut immediate 数据库遭遇 ORA-24324 ORA-24323 参考学习shut immediate 数据库遭遇 ORA-24324 ORA-24323 SQL> shut immediateORA-24324: service handle not initializ…

    2023-03-29
    114

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注