小结:
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:30select 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表达式的形式 |
---|---|---|
YEAR | 年 | YY |
MONTH | 月 | MM |
DAY | 日 | DD |
HOUR | 时 | hh |
MINUTE | 分 | mm |
SECOND | 秒 | ss |
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) 函数的两个参数类型必须相同。