MySql日期函数

日期函数

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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值