mySql常用时间函数

时间:2019-11-29
本文章向大家介绍mySql常用时间函数,主要包括mySql常用时间函数使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.取一个日期字段的年月:

方法一:select date_format(日期字段,'%Y-%m') as '日期' from 表

方法二:使用left()函数来截取

            select left(日期字段,7) as date from tablename  (2019-07:占用7个字符)

方法三:使用substring()函数来截取

            select substring(日期字段,0,7) as date from tablename

2.datetime和timestamp区别:

  1. 存储方式不一样,IMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。而对于DATETIME,不做任何改变,基本上是原样输入和输出。
  2. 占用存储空间不同。timestamp储存占用4个字节,datetime储存占用8个字节
  3. 可表示的时间范围不同。timestamp可表示范围:1970-01-01 00:00:00~2038-01-09 03:14:07,datetime支持的范围更宽1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
  4. TIMESTAMP类型在默认情况下,insert、update 数据时,TIMESTAMP列会自动以当前时间(CURRENT_TIMESTAMP)填充/更新。
  5. 索引速度不同。timestamp更轻量,索引相对datetime更快。
  6. timestamp类型字段特殊性:

    timestamp类型在自动初始化的时候,会自动设置成当前时间,会自动更新,默认的设置为:

    `field` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

       如果不想要这样,可以将timestamp设置为默认为空或者设置具体的默认值

3.mysql获取日期的时间函数:

        now():在执行开始时值就得到了

        sysdate():在函数执行时动态得到值

例子: select now(),sleep(3),now();                 结果:

        select SYSDATE(),SLEEP(3),SYSDATE();  结果:

可以看到,虽然中途 sleep 3 秒,但 now() 函数两次的时间值是相同的; sysdate() 函数两次得到的时间值相差 3 秒.

       curdate():获取当前日期 ,current_date() ,current_date  同 

       curtime():获取当前时间 ,current_time() ,current_time  同

例子: select curdate();                                          结果: 

          select curtime();                                          结果: 

      extract():  选取日期时间的各个部分:日期、时间、年、季度、月、日、小时、分钟、秒、微秒

例子:select extract(year from now()) as year;          结果: 

          last_day:返回月份中的最后一天

例子:select last_day('2008-02-03')                                                                       结果:

MySQL last_day() 函数非常有用,比如我想得到当前月份中有多少天,可以这样来计算:

例子:select now(), day(last_day(now())) as days;                                                  结果:

 4.Mysql日期时间计算函数

在使用mysql的过程中,需要对日期进行计算,比如对某个日期加上几天,几个小时等操作

       date_add()函数语法:  DATE_ADD(date,INTERVAL expr unit)

       date:起始日期或者起始时间

   expr:指定的是一个间隔值,在起始时间中增加或者减少,注意:expr是一个字符串.对于负值间隔,可以以"-"开头

   unit:表示的是一个单位,比如,加上的是1天还是一个小时

       4.1对某个日期加上n天的操作  

            select date_add('2018-06-26',INTERVAL '5' day);                                       结果: 

     4 .2对某个日期加上n小时,n分钟,n秒的操作
          select date_add('2018-06-26 23:59:59',INTERVAL 1 hour);                         结果: 

            select date_add('2018-06-26 23:59:59',INTERVAL 1 minute);                      结果:

            select date_add('2018-06-26 23:59:59',INTERVAL 1 second);                      结果: 

       4.3对某个日期加上n分钟n秒的操作

            select date_add('2018-06-26 23:59:59',INTERVAL '1:1' MINUTE_SECOND);   结果:

       4.4对某个日期加上n小时n分钟n秒的操作

            select date_add('2018-06-26 23:59:59',INTERVAL '1:1:1' HOUR_SECOND);   结果:

      4.5对某个日期加上n小时n分钟的操作

             select date_add('2018-06-26 23:59:59',INTERVAL '1:1' HOUR_MINUTE);       结果:

     4.6.对某个日期加上几天几小时几分钟几秒钟

           select date_add('2018-06-26 23:59:59',INTERVAL '2 2:1:1' DAY_SECOND);      结果:

注:对于日期的减法,尽量用date_sub()函数来实现.

5.Mysql日期时间相减函数

     日期、时间相减函数:datediff(date1,date2), timediff(time1,time2)

5.1日期相减:MySQL datediff(date1,date2):两个日期相减 date1 - date2,返回天数。

     例子:select datediff('2008-08-08', '2008-08-01') as days;     结果:7

              select datediff('2008-08-01', '2008-08-08') as days;     结果:-7

5.2timediff(time1,time2):两个日期相减 time1 - time2,返回 time 差值

     例子:select timediff('2008-08-08 08:08:08', '2008-08-08 00:00:00');  结果:08:08:08

              select timediff('08:08:08', '00:00:00');                                      结果:08:08:08

6.字符串转换为日期:str_to_date()

    函数:str_to_date(str, format)

 例子:       select str_to_date('08/09/2008', '%m/%d/%Y');                              结果:     2008-08-09
                 select str_to_date('08/09/08' , '%m/%d/%y');                                              2008-08-09
                 select str_to_date('08.09.2008', '%m.%d.%Y');                                            2008-08-09
select str_to_date('08:09:30', '%h:%i:%s'); 08:09:30 select str_to_date('08.09.2008 08:09:30', '%m.%d.%Y %h:%i:%s'); 2008-08-09 08:09:30

7.date_format(),time_format():将日期,时间转换成字符串,是str_to_date()的逆转换

         

 

原文地址:https://www.cnblogs.com/zhukf/p/11956270.html