str to date mysql8_MySQL学习笔记八:日期/时间的处理

MySQL日期时间的处理,在其官网文档上都有详细的阐述,想了解更多的同学可自行查阅。

1.查询当前日期时间:函数有now(),localtime(),current_timestamp(),sysdate()。

mysql> select now(),localtime(),current_timestamp(),sysdate();+---------------------+---------------------+---------------------+---------------------+

| now() | localtime() | current_timestamp() | sysdate() |

+---------------------+---------------------+---------------------+---------------------+

| 2015-04-16 09:29:18 | 2015-04-16 09:29:18 | 2015-04-16 09:29:18 | 2015-04-16 09:29:18 |

+---------------------+---------------------+---------------------+---------------------+

1 row in set (0.00 sec)

但是now()与sysdate()有点差异的,一个语句中now()的值是不变的,而sysdate()是动态获取的,例如

mysql> select now(),sleep(2),now();+---------------------+----------+---------------------+

| now() | sleep(2) | now() |

+---------------------+----------+---------------------+

| 2015-04-16 09:34:30 | 0 | 2015-04-16 09:34:30 |

+---------------------+----------+---------------------+

1 row in set (2.00sec)

mysql> select sysdate(),sleep(2),sysdate();+---------------------+----------+---------------------+

| sysdate() | sleep(2) | sysdate() |

+---------------------+----------+---------------------+

| 2015-04-16 09:35:15 | 0 | 2015-04-16 09:35:17 |

+---------------------+----------+---------------------+

1 row in set (2.00sec)-----有此结果可以看出,一般在生成环境中最好使用now(),当然也可以使用sysdate-is-now参数改变sysdate()的行为和now()一样------

2.获取当前日期,curdate()=current_date()=current_date

mysql> select curdate(),current_date(),current_date;+------------+----------------+--------------+

| curdate() | current_date() | current_date |

+------------+----------------+--------------+

| 2015-04-16 | 2015-04-16 | 2015-04-16 |

+------------+----------------+--------------+

1 row in set (0.00 sec)

3.获取当前时间,curtime()=current_time()=current_time

mysql> select curtime(),current_time(),current_time;+-----------+----------------+--------------+

| curtime() | current_time() | current_time |

+-----------+----------------+--------------+

| 09:42:17 | 09:42:17 | 09:42:17 |

+-----------+----------------+--------------+

1 row in set (0.00 sec)

4.获取UTC日期时间,utc_date(),utc_time(),utc_timestamp(),中国属于东八区,故+8小时即可

mysql> selectutc_date(),utc_time(),utc_timestamp();+------------+------------+---------------------+

| utc_date() | utc_time() | utc_timestamp() |

+------------+------------+---------------------+

| 2015-04-16 | 01:55:23 | 2015-04-16 01:55:23 |

+------------+------------+---------------------+

1 row in set (0.00 sec)

5.获取年,月,日

mysql> select year(now()),month(now()),day(now());+-------------+--------------+------------+

| year(now()) | month(now()) | day(now()) |

+-------------+--------------+------------+

| 2015 | 4 | 16 |

+-------------+--------------+------------+

1 row in set (0.00 sec)

6.获取当前星期几,几月,以英文返回,dayname(),monthname()

mysql> selectdayname(curdate()),monthname(curdate());+--------------------+----------------------+

| dayname(curdate()) | monthname(curdate()) |

+--------------------+----------------------+

| Thursday | April |

+--------------------+----------------------+

1 row in set (0.03 sec)

7.获取某个日期在周,月,年中的位置,dayofweek(),dayofmonth,dayofyear(),如要返回中文周几,可以在程序中进行逻辑

mysql> set @d=now();

Query OK,0 rows affected (0.03sec)

mysql> select dayofweek(@d),dayofmonth(@d),dayofyear(@d);+---------------+----------------+---------------+

| dayofweek(@d) | dayofmonth(@d) | dayofyear(@d) |

+---------------+----------------+---------------+

| 5 | 16 | 106 |

+---------------+----------------+---------------+

1 row in set (0.03 sec)

8.获取一个月的最后一天,last_day(),利用它可以得到某个月有多少天

mysql> select last_day(@d),day(last_day(@d));+--------------+-------------------+

| last_day(@d) | day(last_day(@d)) |

+--------------+-------------------+

| 2015-04-30 | 30 |

+--------------+-------------------+

1 row in set (0.00 sec)

9.获取某天位于一年中的第N周week(date,3)=weekofyear(),week()函数的第二个参数用来设定以星期几做为一周的开始

mysql> select week(@d,3),weekofyear(@d);+------------+----------------+

| week(@d,3) | weekofyear(@d) |

+------------+----------------+

| 16 | 16 |

+------------+----------------+

1 row in set (0.00 sec)

10.获取两个日期或者两个时间的相差,datediff(),timediff()

mysql> select datediff(curdate(),'2015-02-15'),timediff(curtime(),'09:09:09')+----------------------------------+--------------------------------+

| datediff(curdate(),'2015-02-15') | timediff(curtime(),'09:09:09') |

+----------------------------------+--------------------------------+

| 60 | 01:21:20 |

+----------------------------------+--------------------------------+

1 row in set (0.05 sec)

11.为日期加上或减去一个间隔,date_add(),date_sub()

mysql> select date_add(curdate(),interval 1 day),date_sub(curdate(),interval 1 day);+------------------------------------+------------------------------------+

| date_add(curdate(),interval 1 day) | date_sub(curdate(),interval 1 day) |

+------------------------------------+------------------------------------+

| 2015-04-17 | 2015-04-15 |

+------------------------------------+------------------------------------+

1 row in set (0.03sec)

mysql> select date_add(@d,interval '01:15:09' hour_second),date_sub(@d,interval '01:15:09'hour_second);+----------------------------------------------+----------------------------------------------+

| date_add(@d,interval '01:15:09' hour_second) | date_sub(@d,interval '01:15:09' hour_second) |

+----------------------------------------------+----------------------------------------------+

| 2015-04-16 11:21:42 | 2015-04-16 08:51:24 |

+----------------------------------------------+----------------------------------------------+

1 row in set (0.00 sec)

12.时间与秒的转换,time_to_sec(),sec_to_time()

mysql> select time_to_sec(@d),sec_to_time(12389);+-----------------+--------------------+

| time_to_sec(@d) | sec_to_time(12389) |

+-----------------+--------------------+

| 36393 | 03:26:29 |

+-----------------+--------------------+

1 row in set (0.00 sec)

13.日期与天数的转换,to_days(),from_days()

mysql> select to_days(@d),from_days(1460000);+-------------+--------------------+

| to_days(@d) | from_days(1460000) |

+-------------+--------------------+

| 736069 | 3997-05-06 |

+-------------+--------------------+

1 row in set (0.00 sec)

14.字符串转换为日期,str_to_date(date,format)

mysql> select str_to_date('09/09/20','%Y/%m/%d');+------------------------------------+

| str_to_date('09/09/20','%Y/%m/%d') |

+------------------------------------+

| 2009-09-20 |

+------------------------------------+

1 row in set (0.00sec)

mysql> select str_to_date('09.09.20','%Y.%m.%d');+------------------------------------+

| str_to_date('09.09.20','%Y.%m.%d') |

+------------------------------------+

| 2009-09-20 |

+------------------------------------+

1 row in set (0.00 sec)

format标志含义:

%a Abbreviated weekday name (Sun..Sat)%b Abbreviated month name (Jan..Dec)%c Month, numeric (0..12)%D Day of the month withEnglish suffix (0th, 1st, 2nd, 3rd, …)%d Day of the month, numeric (00..31)%e Day of the month, numeric (0..31)%f Microseconds (000000..999999)%H Hour (00..23)%h Hour (01..12)%I Hour (01..12)%i Minutes, numeric (00..59)%j Day of year (001..366)%k Hour (0..23)%l Hour (1..12)%M Monthname (January..December)%m Month, numeric (00..12)%p AM orPM%r Time, 12-hour (hh:mm:ss followed by AM orPM)%S Seconds (00..59)%s Seconds (00..59)%T Time, 24-hour (hh:mm:ss)%U Week (00..53), where Sunday is the first day ofthe week%u Week (00..53), where Monday is the first day ofthe week%V Week (01..53), where Sunday is the first day of the week; used with %X%v Week (01..53), where Monday is the first day of the week; used with %x%W Weekday name (Sunday..Saturday)%w Day of the week (0=Sunday..6=Saturday)%X Year for the week where Sunday is the first day ofthe week, numeric, four digits;

usedwith %V%x Year for the week, where Monday is the first day ofthe week, numeric, four

digits; usedwith %v%Y Year, numeric, four digits%y Year, numeric (two digits)%% A literal “%” character

%x x, for any “x” not listed above

15.日期格式化,date_format(str,format)

mysql> select date_format('09.09.20','%Y:%m:%d');+------------------------------------+

| date_format('09.09.20','%Y:%m:%d') |

+------------------------------------+

| 2009:09:20 |

+------------------------------------+

1 row in set (0.00 sec)

16.日期/时间拼凑,makedate(year,dayofyear),maketime(hour,minute,second)

mysql> select makedate(2015,200),maketime(13,20,15);+--------------------+--------------------+

| makedate(2015,200) | maketime(13,20,15) |

+--------------------+--------------------+

| 2015-07-19 | 13:20:15 |

+--------------------+--------------------+

1 row in set (0.00 sec)

17.unix时间戳,时间戳转换等,unix_timestamp(date),timestamp(date)

mysql> select unix_timestamp(),unix_timestamp('2009-09-09'),timestamp(now());+------------------+------------------------------+---------------------+

| unix_timestamp() | unix_timestamp('2009-09-09') | timestamp(now()) |

+------------------+------------------------------+---------------------+

| 1429153960 | 1252425600 | 2015-04-16 11:12:40 |

+------------------+------------------------------+---------------------+

1 row in set (0.00 sec)

18.在应用中碰到需要比较日期时,比如获取某一天的数据,不能使用“=”等于号来比较,使用"<>",比如

select * from users where regDate='2009-10-22' //如果使用regDate='2009-10-22'相当于00:00:00

19.知道用户的生日得到年龄

mysql> select year(curdate())-year('1990-07-30')-(right(curdate(),5)

| age |

+------+

| 24 |

+------+

1 row in set (0.05 sec)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值