MySQL日期和时间函数的用法及使用举例

MySQL日期和时间函数的用法及使用举例

MySQL提供了用于处理日期和时间的相关函数。现对这些函数的功能及用法进行介绍并举例。
创建数据表emp并输入数据:

create table emp(
    emp_id int primary key auto_increment comment '员工编号',
    emp_name varchar(50) not null default '' comment '姓名',
    gender char(1) not null default '男' comment '性别',
    birth datetime comment '出生日期',
    phone char(20) not null default '' comment '电话',
    department char(20) not null default '' comment '部门'
);

insert into emp(emp_name,gender,birth,phone,department) 
values('王江涛','男','1989-12-3','13603735218','销售部'),
('张明远','男','1989-12-3','13837842215','销售部'),
('刘芳芳','女','1992-2-23','13837125588','销售部'),
('赵珍珍','女','1987-8-20','13969821158','销售部'),
('刘鹏飞','男','1998-6-8','13536872256','财务部'),
('王大陆','男','1997-3-15','13937365288','财务部'),
('刘莉莉','女','1988-4-22','13532587899','人事部'),
('张云云','女','1989-6-2','13937325444','人事部');

一、返回系统日期,时间函数

返回系统日期和时间常用到五个函数,语法如下:

curdate();
currentdate();
curtime();
currenttime();
now();

说明:以上五个函数没有参数,其中curtdate()和currentdate()函数返回系统日期,curttime()和currenttime()函数返回系统时间,now()返回系统日期和时间。

举例:

mysql> select curdate() as current_data1,current_date() as current_date2;
+---------------+---------------+
| current_data1 | current_date2 |
+---------------+---------------+
| 2019-11-20    | 2019-11-20    |
+---------------+---------------+
1 row in set (0.00 sec)

mysql> select curtime() as current_time1,current_time() as current_time2;
+---------------+---------------+
| current_time1 | current_time2 |
+---------------+---------------+
| 21:01:37      | 21:01:37      |
+---------------+---------------+
1 row in set (0.00 sec)

mysql> select now() as current_datetime;
+---------------------+
| current_datetime    |
+---------------------+
| 2019-11-20 21:01:53 |
+---------------------+
1 row in set (0.00 sec)

二、返回日期时间中的各个部分的函数

可以通过year()、month()、day()、hour()、minute()、seconde()等函数返回日期时间中的年、月、日、时、分、秒。
语法如下:

year(date);   --返回date对应的年份,范围是从1000到9999。
month(date);  --返回date对应的月份,范围时从1到12。
monthname(date);  --返回date对应月份的全名。
day(date);  --返回date对应的该月日期,范围是从1到31。
dayofmonth(date);  --同day(date)
dayofweek(date); --返回date(1=周日,2=周一, ...,7=周六)对应的工作日索引。
dayofyear(date); --返回date对应的一年中的天数,范围是从1到366。
dayname(date);  --返回date对应的工作日名称(星期几)。
quarter(date);  --返回date对应的一年中的季度值,范围是从1到4。
hour(time);  --返回time对应的小时数。对于日时值的返回值范围是从0到23。
minute(time);  --返回time对应的分钟数,范围是从0到59。
second(time);  --返回time对应的秒数,范围是从0到59。

举例:

mysql> select year(now()) as year,month(now()) as month,day(now()) as day,
dayofmonth(now()) as dayofmonth,quarter(now()) as quarter;
+------+-------+------+------------+---------+
| year | month | day  | dayofmonth | quarter |
+------+-------+------+------------+---------+
| 2019 |    11 |   20 |         20 |       4 |
+------+-------+------+------------+---------+
1 row in set (0.00 sec)


mysql> select hour(now()) as hour,minute(now()) as minute,second(now()) as second;
+------+--------+--------+
| hour | minute | second |
+------+--------+--------+
|   21 |     49 |     18 |
+------+--------+--------+
1 row in set (0.00 sec)

mysql> select month(now()) as month,monthname(now()) as monthname,
dayofweek(now()) as dayofweek,dayname(now()) as dayname;
+-------+-----------+-----------+-----------+
| month | monthname | dayofweek | dayname   |
+-------+-----------+-----------+-----------+
|    11 | November  |         4 | Wednesday |
+-------+-----------+-----------+-----------+
1 row in set (0.00 sec)

mysql> select emp_name,birth from emp where month(birth)=12 and day(birth)=3;
--查询生日为12月3号的员工
+-----------+---------------------+
| emp_name  | birth               |
+-----------+---------------------+
| 王江涛    | 1989-12-03 00:00:00 |
| 张明远    | 1989-12-03 00:00:00 |
+-----------+---------------------+
2 rows in set (0.02 sec)

mysql> select emp_name,birth,year(current_date())-year(birth) as age from emp;
--查询员工的年龄
+-----------+---------------------+------+
| emp_name  | birth               | age  |
+-----------+---------------------+------+
| 王江涛    | 1989-12-03 00:00:00 |   30 |
| 张明远    | 1989-12-03 00:00:00 |   30 |
| 刘芳芳    | 1992-02-23 00:00:00 |   27 |
| 赵珍珍    | 1987-08-20 00:00:00 |   32 |
| 刘鹏飞    | 1998-06-08 00:00:00 |   21 |
| 王大陆    | 1997-03-15 00:00:00 |   22 |
| 刘莉莉    | 1988-04-22 00:00:00 |   31 |
| 张云云    | 1989-06-02 00:00:00 |   30 |
+-----------+---------------------+------+
8 rows in set (0.00 sec)

三、date_add()函数

date_add()函数的语法如下:

date_add(date,interval n unit);

说明:在date基础上,增加(n大于0)或减少(n小于0)n年(月,日,小时,分钟,秒)。unit可以是year(年),month(月),day(天),hour(小时),minute(分钟),second(秒)。

举例:

mysql> set @date='2019-2-20 15:12:35';
Query OK, 0 rows affected (0.00 sec)

mysql> select date_add(@date,interval 30 year) as date1,
       date_add(@date,interval -30 year) as date2;
+---------------------+---------------------+
| date1               | date2               |
+---------------------+---------------------+
| 2049-02-20 15:12:35 | 1989-02-20 15:12:35 |
+---------------------+---------------------+
1 row in set (0.00 sec)

mysql> select date_add(@date,interval 30 month) as date1,
       date_add(@date,interval -30 month) as datte2;
+---------------------+---------------------+
| date1               | date2               |
+---------------------+---------------------+
| 2021-08-20 15:12:35 | 2016-08-20 15:12:35 |
+---------------------+---------------------+
1 row in set (0.00 sec)

mysql> select date_add(@date,interval 30 day) as date1,
       date_add(@date,interval -30 day) as date2; 
+---------------------+---------------------+
| date1               | date2               |
+---------------------+---------------------+
| 2019-03-22 15:12:35 | 2019-01-21 15:12:35 |
+---------------------+---------------------+
1 row in set (0.00 sec)

mysql> select date_add(@date,interval 30 hour) as date1,
       date_add(@date,interval -30 hour) as date22;
+---------------------+---------------------+
| date1               | date2               |
+---------------------+---------------------+
| 2019-02-21 21:12:35 | 2019-02-19 09:12:35 |
+---------------------+---------------------+
1 row in set (0.00 sec)

mysql> select date_add(@date,interval 300 minute) as date1,
       date_add(@date,interval -300 minute) ass date2;
+---------------------+---------------------+
| date1               | date2               |
+---------------------+---------------------+
| 2019-02-20 20:12:35 | 2019-02-20 10:12:35 |
+---------------------+---------------------+
1 row in set (0.00 sec)

mysql> select date_add(@date,interval 300 second) as date1,
       date_add(@date,interval -300 second) as date2;
+---------------------+---------------------+
| date1               | date2               |
+---------------------+---------------------+
| 2019-02-20 15:17:35 | 2019-02-20 15:07:35 |
+---------------------+---------------------+
1 row in set (0.00 sec)

四、adddate()函数

adddate()函数的语法如下:

adddate(date,days);   --在date的基础上,增加(n>0)或减少(n<0)n天。
adddate(date,interval n unit);   --与date_add()函数相同

举例:

mysql> set @date='2019-2-20 15:12:35';
Query OK, 0 rows affected (0.00 sec)

mysql> select adddate(@date,30) as date1,adddate(@date,-30) as date2;
+---------------------+---------------------+
| date1               | date2               |
+---------------------+---------------------+
| 2019-03-22 15:12:35 | 2019-01-21 15:12:35 |
+---------------------+---------------------+
1 row in set (0.00 sec)

五、date()和time()函数

date()和time()函数的语法如下:

date(datetime);
time(datetime);

说明:date(datetime)提取日期或日期时间表达式中的日期部分,time(datetime)提取日期时间表达式中的时间部分。

举例:

mysql> select date(now()) as date,time(now()) as time;
+------------+----------+
| date       | time     |
+------------+----------+
| 2019-11-20 | 22:38:01 |
+------------+----------+
1 row in set (0.00 sec)

六、date_format()函数

date_format函数的语法如下:

date_format(date,format);

说明:根据format字符串规定的格式显示日期。format的字符串如下表:

说明符 说明
%a 工作日的缩写名称 (Sun…Sat)
%b 月份的缩写名称 (Jan…Dec)
%c 月份,数字形式(0…12)
%D 带有英语后缀的该月日期 (0th, 1st, 2nd, 3rd, …)
%d 该月日期, 数字形式 (00…31)
%e 该月日期, 数字形式(0…31)
%f 微秒 (000000…999999)
%H 小时(00…23)
%h 小时(01…12)
%I 小时 (01…12)
%i 分钟,数字形式 (00…59)
%j 一年中的天数 (001…366)
%k 小时 (0…23)
%l 小时 (1…12)
%M 月份名称 (January…December)
%m 月份, 数字形式 (00…12)
%p 上午(AM)或下午( PM)
%r 时间 , 12小时制 (小时hh:分钟mm:秒数ss 后加 AM或PM)
%S 秒 (00…59)
%s 秒 (00…59)
%T 时间 , 24小时制 (小时hh:分钟mm:秒数ss)
%U 周 (00…53), 其中周日为每周的第一天
%u 周 (00…53), 其中周一为每周的第一天
%V 周 (01…53), 其中周日为每周的第一天 ; 和 %X同时使用
%v 周 (01…53), 其中周一为每周的第一天 ; 和 %x同时使用
%W 工作日名称 (周日…周六)
%w 一周中的每日 (0=周日…6=周六)
%X 该周的年份,其中周日为每周的第一天, 数字形式,4位数;和%V同时使用
%x 该周的年份,其中周一为每周的第一天, 数字形式,4位数;和%v同时使用
%Y 年份, 数字形式,4位数
%y 年份, 数字形式 (2位数)
%% ‘%’文字字符

举例:

mysql> select date_format(now(),'%M %d,%Y') as currentdate;
+------------------+
| currentdate      |
+------------------+
| November 20,2019 |
+------------------+
1 row in set (0.00 sec)


mysql> select date_format(now(),'%a,%M %D,%Y') as currentdate;
+------------------------+
| currentdate            |
+------------------------+
| Wed,November 20th,2019 |
+------------------------+
1 row in set (0.00 sec)

七、extract()函数

extract()函数的语法如下:

extract(part from date);

说明:从日期中取出某一部分。part可以是year(年),month(月),day(日),hour(小时),minute(分钟),second(秒)等。

举例:

mysql> set @date='2019-1-23 15:23:52';
Query OK, 0 rows affected (0.00 sec)

mysql> select extract(year from @date) as year,extract(month from @date) as month,
       extract(day from @date) as day,extract(hour from @date) as hour,
       extract(minute from @date) as minute,extract(second from @date) as second;
+------+-------+------+------+--------+--------+
| year | month | day  | hour | minute | second |
+------+-------+------+------+--------+--------+
| 2019 |     1 |   23 |   15 |     23 |     52 |
+------+-------+------+------+--------+--------+
1 row in set (0.00 sec)

八、last_day()函数

last_day()函数的语法如下:

last_day(date));

说明:返回该日期所在月份的最后一天的日期。

举例:

mysql> select last_day('2019-10-2') as last_day;
+------------+
| last_day   |
+------------+
| 2019-10-31 |
+------------+
1 row in set (0.00 sec)

mysql> select last_day('2019-2-2') as last_day;
+------------+
| last_day   |
+------------+
| 2019-02-28 |
+------------+
1 row in set (0.00 sec)

mysql> select last_day('2016-2-2') as last_day;
+------------+
| last_day   |
+------------+
| 2016-02-29 |
+------------+
1 row in set (0.00 sec)

九、makedate()与maketime()函数

makedate()与maketime()函数的语法如下:

makedate(year,dayofyear);  --根据年份以及年份中的天生成一个日期
maketime(hour,minute,second);  --根据小时,分钟和秒数生成一个时间

举例:

mysql> select makedate(2019,3) as date1,makedate(2019,365);
+------------+--------------------+
| date1      | makedate(2019,365) |
+------------+--------------------+
| 2019-01-03 | 2019-12-31         |
+------------+--------------------+
1 row in set (0.00 sec)

mysql> select makedate(2019,3) as date1,makedate(2019,365) as date2;
+------------+------------+
| date1      | date2      |
+------------+------------+
| 2019-01-03 | 2019-12-31 |
+------------+------------+
1 row in set (0.00 sec)

mysql> select maketime(10,25,35) as time1,maketime(15,50,38) as time2;
+----------+----------+
| time1    | time2    |
+----------+----------+
| 10:25:35 | 15:50:38 |
+----------+----------+
1 row in set (0.00 sec)

十、datediff()函数

date_diff()函数语法如下:

datediff(date1,date2);

说明:返回date1和date2间隔的天数。

举例:

mysql> select datediff('2018-1-15','2019-10-8') as different1,
datediff('2019-11-8','2018-6-28') as different2;
+------------+------------+
| different1 | different2 |
+------------+------------+
|       -631 |        498 |
+------------+------------+
1 row in set (0.00 sec)

十一、timediff()函数

timediff()函数语法如下:

timediff(time1,time2);

说明:返回time1和time2之间的时间间隔。

举例:

mysql> select timediff('18:25:30','16:20:35') as different1,
timediff('10:20:30','15:12:1') as different2;
+------------+------------+
| different1 | different2 |
+------------+------------+
| 02:04:55   | -04:51:31  |
+------------+------------+
1 row in set (0.00 sec)
发布了44 篇原创文章 · 获赞 48 · 访问量 5412

猜你喜欢

转载自blog.csdn.net/weixin_44377973/article/details/103174557