您的位置:首页 > 数据库 > MySQL

MySQL:日期函数、时间函数总结

2016-08-08 00:00 519 查看
摘要: 前端时间,在开发的时候,涉及到一些对时间的操作,日期转字符串,字符串转日期等等,过后做了一些整理

小结:

1 获取当前时间(动态的,限定死的)

now();sysdate()

2 日期转函数:date_format(‘date’,’format'),

时间转函数: time_format(‘time’,’format')

日期、天数)转换函数:to_days(date), from_days(days)

(时间、秒)转换函数:time_to_sec(‘time'), sec_to_time(‘seconds')

拼凑日期、时间函数:makedate(year,dayofyear), maketime(hour,minute,second)

(Unix 时间戳、日期)转换函数

DATE_ADD(d,INTERVAL expr type)函数返回起始日期d加上一个时间段后的日期。

为日期减去一个时间间隔:date_sub()

1 MySQL 获得当前日期时间 函数

1.1 获得当前日期+时间(date + time)函数:

now()
select now();
sysdate()
select sysdate()
不同之处在于:now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值。看下面的例子就明白了:

select now(),sysdate(), sleep(3), now() as now2,sysdate() as sysdate2;
sysdate() 日期时间函数,一般情况下很少用到。

1.2 MySQL 获得当前时间戳函数:current_timestamp, current_timestamp() 两种方式都可以。后面的()可加可去

2 MySQL 日期转换函数、时间转换函数

2.1 日期、时间转换函数:date_format(‘date’,’format'), time_format(‘time’,’format') 能够把一个日期/时间转换成各种各样的字符串格式。它是 str_to_date(‘str’,’format') 函数的 一个逆转换。

2.2 字符串转换为日期)函数:str_to_date(‘str', ‘format')

以下的写法都是错的,必须要给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



这是为什么呢?

2.3 (日期、天数)转换函数:to_days(date), from_days(days)

select to_days(‘0000-00-00'); 结果为null,空

select to_days('2008-08-08');



2.4(时间、秒)转换函数:time_to_sec(‘time'), sec_to_time(‘seconds')

select time_to_sec('01:00:05'); -- 结果:'3605’ 时间转秒

select sec_to_time('3605'); -- 结果:'01:00:05' 秒转时间

2.5 拼凑日期、时间函数:makedate(year,dayofyear), maketime(hour,minute,second)

拼凑日期:select makedate(,); 举例:

一位和两位的时候默认是从2000以后记得,三位的时候默认年份首位是0

sql
结果
select makedate('7','100') t1,
makedate('54','100') t2,
makedate('654','100') t3,
makedate('2009','100’) t4;


拼凑时间:select maketime(,,); '12:15:30'

拼凑时间的时候分,秒最大只能取到59,超过之后,结果就为Null;小时最大能显示到838.

sql
结果
select
maketime('1','2','3’) t1,
maketime('100','2','3’) t2,
maketime('1000','2','3') t3,
maketime('1','60','3') t4,
maketime('1','2','60’) t5


2.6 (Unix 时间戳、日期)转换函数

unix_timestamp(date), 日期转时间戳

from_unixtime(unix_timestamp), 时间戳转时间

from_unixtime(unix_timestamp,format) 按照指定格式时间戳转时间

下面是示例:

sql
结果
select unix_timestamp('1218290027') t1,
unix_timestamp('2008-08-08') t2, -- 1218124800
unix_timestamp('2008-08-08 12:30:00') t3, — 1218169800

from_unixtime('1218290027') t4, -- '2008-08-09 21:53:47'
from_unixtime('1218124800') t5, -- '2008-08-08 00:00:00'
from_unixtime('1218169800') t6, -- '2008-08-08 12:30:00'

from_unixtime('1218169800', '%Y %D %M %h:%i:%s %x') t7 -- '2008 8th August 12:30:00 2008'






2.7 DATE_ADD(d,INTERVAL expr type)函数返回起始日期d加上一个时间段后的日期。

expr是一个表达式,用来指定从起始日期添加或减去的时间间隔值。

expr是一个字符串。对于负值的时间间隔,它可以用一个负号“-”开头。

expr表达式与后面的间隔类型type对应。

sql
结果
SELECT
DATE_ADD('2014-10-8 23:59:59',
INTERVAL 1 SECOND) AS col1,
DATE_ADD('2014-10-8 23:59:59',
INTERVAL '1 1' YEAR_MONTH) AS col2,
时间间隔使用的是YEAR_MONTH;expr表达式中的年和月之间用空格隔开,因此该函数返回的结果是d日期中一年零一个月以后的日期和时间
DATE_ADD('2014-10-8 23:59:59',
INTERVAL '1 1' MINUTE_SECOND) AS col3;
DATE_ADD('2014-10-9 00:00:01',
INTERVAL - 1 SECOND) AS col4,
DATE_ADD('2014-10-9',
INTERVAL '-1 -1' YEAR_MONTH) AS col5;


使用DATE_ADD()函数执行日期减操作。



MySQL中的日期间隔类型如下表所示:

类型(type值)含义expr表达式的形式
YEARYY
MONTHMM
DAYDD
HOURhh
MINUTEmm
SECONDss
YEAR_MONTH年和月YY和MM之间用任意符号隔开
DAY_HOUR日和小时DD和hh之间用任意符号隔开
DAY_MINUTE日和分钟DD和mm之间用任意符号隔开
DAY_SECOND日和秒钟DD和ss之间用任意符号隔开
HOUR_MINUTE时和分hh和mm之间用任意符号隔开
HOUR_SECOND时和秒hh和ss之间用任意符号隔开
MINUTE_SECOND分和秒mm和ss之间用任意符号隔开
DATE_ADD(d,INTERVAL expr type)函数中的type必须在上表中。而且,type必须是上表中的某一项,不能是其中几项的组合。因此,使用该函数时,一定要注意type的选择。

DATE_ADD(d,INTERVAL expr type)函数和ADDDATE(d,INTERVAL expr type)函数的作用相同。

2.8 为日期减去一个时间间隔:date_sub()

2.8.1 select date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second) t1;

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

sql
结果
SELECT
DATEDIFF('2008-08-08', '2008-08-01') d1,
DATEDIFF('2008-08-01', '2008-08-08') d2;


SELECT
TIMEDIFF('2008-08-08 08:08:08',
'2008-08-08 00:00:00') t1,
TIMEDIFF('08:08:08', '00:00:00') t2;


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

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

注意:timediff(time1,time2) 函数的两个参数类型必须相同。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: