十三、MySQL基础系列笔记之日期和时间函数

作者: 温新

分类: 【MySql】

阅读: 2004

时间: 2020-10-16 15:49:10

常见的日期和时间函数有:

函数 功能
curdate() 返回当前年月日。如:2020-10-16
curtime() 返回当前十分秒。如:22:54:23
now() 返回当前时间和日期。如:2020-10-16 22:54:23
unix_timestamp(date) 返回日期date的UNIX时间戳。如:1602860219
from_unixtime 返回unix时间戳的日期值。如:from_unixtime(1602860219) = 2020-10-16 22:56:59
week(date) 返回日期date为一年中的第几周
year(date) 返回日期date的年份
hour(time) 返回time的小时值
minute(time) 返回time的分钟值
monthname(date) 返回date的月份名
quarter(date) 返回date对应的一年中的季度值,范围1-4
date_format(date,fmt) 返回按字符串fmt格式化日期date值
date_add(date,interval expr type) 返回一个日期或时间值加上一个时间间隔的时间值
date_sum(date,interval expr type) 函数从日期减去指定的时间间隔
datediff(expr,expr2) 返回起始时间expr和结束时间expr2之间的天数
dayname(d) 返回d对应的工作日的英文名称,如Sunday
dayofweek(d) 返回d对应的一周中的索引(位置),1=等于周日,2=周一,...7=周六
weekday(d) 返回日期对应的周索引,0=周一,...,6=周日
weekofyear(d) 计算给定日期位于一年中的第几周
dayofyear(d) 返回d是一年中第几天,范围1~366
dayofmonth(d) 返回指定d日期在一个月中的位置
time_to_sec(time) 返回已经转化为秒的tme参数,转换公式:小时3600+分60+秒
sec_to_time(seconds) 返回被转化为小时、分、秒的seconds值
to_days(date) 返回给定date日期的天数
mysql>  select curdate(),curtime(),now(),unix_timestamp(now()),from_unixtime(1602860664);
+------------+-----------+---------------------+-----------------------+---------------------------+
| curdate()  | curtime() | now()               | unix_timestamp(now()) | from_unixtime(1602860664) |
+------------+-----------+---------------------+-----------------------+---------------------------+
| 2020-10-16 | 23:08:07  | 2020-10-16 23:08:07 |            1602860887 | 2020-10-16 23:04:24       |
+------------+-----------+---------------------+-----------------------+---------------------------+
1 row in set (0.00 sec)

mysql> select hour(curtime()),minute(curtime()),monthname(now()),week(now()),year(now()),hour(curtime());
+-----------------+-------------------+------------------+-------------+-------------+-----------------+
| hour(curtime()) | minute(curtime()) | monthname(now()) | week(now()) | year(now()) | hour(curtime()) |
+-----------------+-------------------+------------------+-------------+-------------+-----------------+
|              23 |                 7 | October          |          41 |        2020 |              23 |
+-----------------+-------------------+------------------+-------------+-------------+-----------------+
1 row in set (0.00 sec)

date_format(date,fmt)格式化时间

date_format格式化的格式有许多,功能也非常强大,格式符如下:

格式符 作用
%S和%s 两位数字形式的,如00,01,...59
%i 两位数字形式的,如00,01,...59
%H 两位数字形式的小时,24小时,如00,01,...23
%h和%I 两位数字形式的小时,12小时,如01,02,...12
%k 数字形式的小时,24小时,如0,1,...23
%l 数字形式的小时,12小时,如1,2,...12
%T 24小时的时间形式,如hh:mm:ss
%r 12小时的时间形式,如hh:mm:ssAM 或 hh:mm:ssPm
%p AM或PM
%W 一周中每一天的名称,如Sunday,Monday...,Saturday
%a 一周中每一天名称的缩写,如Sun,Mon,...,Sat
%d 两位数字表示月中的天数,如00,01,..,31
%e 数字形式表示月中的天数,如1,2,...31
%D 英文后缀表示月中的天数,如1st,2nd,3rd,...
%w 数字形式表示周中的天数,如0=Sunday,1=Monday,...6=Saturday
%j 3位数字表示年中的天数,如001,002,...366
%U 周(0,1,52),其中Sunday为周中的第一天
%u 周(0,1,52),其中Monday为周中的第一天
%M 月名,如January,February...December
%b 缩写的月名,如Oct...
%m 两位数字表示的月分,如01,02,...12
%c 数字表示的月份,如1,2,...12
%Y 4位数字表示年份,如2020
%y 两位数字表示的年份,如20
%% 直接值%

date_add(date,interval expr type)-返回与所给日期date相差interval时间段的日期

其中intervel是间隔类型关键字,expr是一个表达式,这个表达式对应后面的类型,type是间隔类型。间隔类型如下:

表达式类型 说明 格式
hour 小时 hh
minute mm
second ss
year YY
month MM
day DD
year_month 年和月 YY-MM
day_hour 日和小时 DD hh
day_minute 日和分钟 DD hh:mm
day_second 日和秒 DD hh:mm::ss
hour_minute 小时和分 hh:mm
hour_second 小时和秒 hh:ss
minute_second 分钟和秒 mm:ss
# 第一列,返回当前时间,第二列,当前时间距离31天后的日期时间,第三列:返回距离当前时间一年2个月后日期时间
mysql> select now(),date_add(now(),interval 31 day),date_add(now(),interval '1_2' year_month);
+---------------------+---------------------------------+-------------------------------------------+
| now()               | date_add(now(),interval 31 day) | date_add(now(),interval '1_2' year_month) |
+---------------------+---------------------------------+-------------------------------------------+
| 2020-10-16 23:41:03 | 2020-11-16 23:41:03             | 2021-12-16 23:41:03                       |
+---------------------+---------------------------------+-------------------------------------------+
1 row in set (0.00 sec)

2020-10-17

请登录后再评论