日期函数
now()
用于获取当前时间。
实例
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2022-06-02 14:08:03 |
+---------------------+
1 row in set (0.00 sec)
date_format(date,format)
格式化日期,使日期按着一定的格式输出。
常见格式有
%S, %s 两位数字形式的秒( 00,01, …, 59)
%I, %i 两位数字形式的分( 00,01, …, 59)
%H 两位数字形式的小时,24 小时(00,01, …, 23)
%h 两位数字形式的小时,12 小时(01,02, …, 12)
%k 数字形式的小时,24 小时(0,1, …, 23)
%l 数字形式的小时,12 小时(1, 2, …, 12)
%T 24 小时的时间形式(hh:mm:ss)
%r 12 小时的时间形式(hh:mm:ss AM 或hh:mm:ss PM)
%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 以三位数字表示年中的天数( 001, 002, …, 366)
%U 周(0, 1, 52),其中Sunday 为周中的第一天
%u 周(0, 1, 52),其中Monday 为周中的第一天
%M 月名(January, February, …, December)
%b 缩写的月名( January, February,…, December)
%m 两位数字表示的月份(01, 02, …, 12)
%c 数字表示的月份(1, 2, …, 12)
%Y 四位数字表示的年份
%y 两位数字表示的年份
%% 直接值“%”
除了now()外,MySql还提供了一下函数处理时间
current_timestamp()
localtime()
localtimestamp()
等同于now()
实例
mysql> select date_format(now(),'%Y-%m-%d %H:%I:%s') as date_format;
+---------------------+
| date_format |
+---------------------+
| 2022-06-02 14:02:55 |
+---------------------+
1 row in set (0.00 sec)
curdate()
获取当前日期
mysql> select curdate();
+------------+
| curdate() |
+------------+
| 2022-06-02 |
+------------+
1 row in set (0.00 sec)
curtime()
获取当前时间
mysql> select curtime();
+-----------+
| curtime() |
+-----------+
| 14:23:15 |
+-----------+
1 row in set (0.00 sec)
sysdate()
获取当前的日期和时间 和now()函数类似
mysql> select sysdate();
+---------------------+
| sysdate() |
+---------------------+
| 2022-06-02 14:24:52 |
+---------------------+
1 row in set (0.00 sec)
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2022-06-02 14:25:06 |
+---------------------+
1 row in set (0.00 sec)
time_to_sec()
将时间转化为秒
mysql> select time_to_sec('01:02:03');
+-------------------------+
| time_to_sec('01:02:03') |
+-------------------------+
| 3723 |
+-------------------------+
1 row in set (0.00 sec)
sec_to_time()
将秒转化为时间
mysql> select sec_to_time('3729');
+---------------------+
| sec_to_time('3729') |
+---------------------+
| 01:02:09.000000 |
+---------------------+
1 row in set (0.00 sec)
to_days()
将日期转化为天
mysql> select to_days('2021-06-02');
+-----------------------+
| to_days('2021-06-02') |
+-----------------------+
| 738308 |
+-----------------------+
1 row in set (0.00 sec)
from_days()
将天转化为日期
mysql> select from_days('738308');
+---------------------+
| from_days('738308') |
+---------------------+
| 2021-06-02 |
+---------------------+
1 row in set (0.00 sec)
str_to_date(date,format)
将字符串转化为日期格式
mysql> select str_to_date('20220602','%Y%m%d');
+----------------------------------+
| str_to_date('20220602','%Y%m%d') |
+----------------------------------+
| 2022-06-02 |
+----------------------------------+
1 row in set (0.00 sec)
mysql> select str_to_date('2022/06/02','%Y%m%d');
+------------------------------------+
| str_to_date('2022/06/02','%Y%m%d') |
+------------------------------------+
| NULL |
+------------------------------------+
1 row in set, 1 warning (0.00 sec)
-- 格式不一致,报null
mysql> select str_to_date('2022/06/02','%Y-%m%-d');
+--------------------------------------+
| str_to_date('2022/06/02','%Y-%m%-d') |
+--------------------------------------+
| NULL |
+--------------------------------------+
1 row in set, 1 warning (0.00 sec)
-- 注意格式
mysql> select str_to_date('2022/06/02','%Y/%m/%d');
+--------------------------------------+
| str_to_date('2022/06/02','%Y/%m/%d') |
+--------------------------------------+
| 2022-06-02 |
+--------------------------------------+
1 row in set (0.00 sec)
data_add(date,intreval 要加的 day/hour/second/…)
为日期增加一个时间间隔
注意 当增加的为负数时,代表减去相应的时间间隔。
mysql> set @de=now();
Query OK, 0 rows affected (0.00 sec)
mysql> select date_add(@de,interval 1 day);
+------------------------------+
| date_add(@de,interval 1 day) |
+------------------------------+
| 2022-06-03 14:49:27 |
+------------------------------+
1 row in set (0.00 sec)
mysql> select date_add(@de,interval 1 hour);
+-------------------------------+
| date_add(@de,interval 1 hour) |
+-------------------------------+
| 2022-06-02 15:49:27 |
+-------------------------------+
1 row in set (0.00 sec)
mysql> select date_add(@de,interval 1 week);
+-------------------------------+
| date_add(@de,interval 1 week) |
+-------------------------------+
| 2022-06-09 14:49:27 |
+-------------------------------+
1 row in set (0.00 sec)
mysql> select date_add(@de,interval 1 month);
+--------------------------------+
| date_add(@de,interval 1 month) |
+--------------------------------+
| 2022-07-02 14:49:27 |
+--------------------------------+
1 row in set (0.01 sec)
-- 当为负数时,代表减去相应的时间间隔
mysql> select date_add(@de,interval -1 month);
+---------------------------------+
| date_add(@de,interval -1 month) |
+---------------------------------+
| 2022-05-02 14:49:27 |
+---------------------------------+
1 row in set (0.00 sec)
date_sub(date,intreval 要减的 day/hour/second/…)
为日期减去相应的时间间隔
注意当为负数时标识增加相应的时间间隔
mysql> set @de=now();
Query OK, 0 rows affected (0.00 sec)
mysql> select date_sub(@de,interval -1 month);
+---------------------------------+
| date_sub(@de,interval -1 month) |
+---------------------------------+
| 2022-07-02 14:49:27 |
+---------------------------------+
1 row in set (0.00 sec)
mysql> select date_sub(@de,interval 1 day);
+------------------------------+
| date_sub(@de,interval 1 day) |
+------------------------------+
| 2022-06-01 14:49:27 |
+------------------------------+
1 row in set (0.00 sec)
mysql> select date_sub(@de,interval 1 hour);
+-------------------------------+
| date_sub(@de,interval 1 hour) |
+-------------------------------+
| 2022-06-02 13:49:27 |
+-------------------------------+
1 row in set (0.00 sec)
mysql> select date_sub(@de,interval 1 second);
+---------------------------------+
| date_sub(@de,interval 1 second) |
+---------------------------------+
| 2022-06-02 14:49:26 |
+---------------------------------+
1 row in set (0.00 sec)
mysql> select date_sub(@de,interval 1 week);
+-------------------------------+
| date_sub(@de,interval 1 week) |
+-------------------------------+
| 2022-05-26 14:49:27 |
+-------------------------------+
1 row in set (0.00 sec)
datediff(date1,date2)
求两个日期的间隔
注意 前面的日期减去后面的日期
mysql> set @de=now();
Query OK, 0 rows affected (0.00 sec)
mysql> select datediff(@de,date_add(@de,interval 1 day));
+--------------------------------------------+
| datediff(@de,date_add(@de,interval 1 day)) |
+--------------------------------------------+
| -1 |
+--------------------------------------------+
1 row in set (0.00 sec)
timediff(time1,time2)
求两个时间的时间间隔
注意 前面的时间减去后面的时间
mysql> set @de=now();
Query OK, 0 rows affected (0.00 sec)
mysql> select timediff(@de,date_add(@de,interval 1 day));
+--------------------------------------------+
| timediff(@de,date_add(@de,interval 1 day)) |
+--------------------------------------------+
| -24:00:00 |
+--------------------------------------------+
1 row in set (0.00 sec)