mySQL日期函数并运行_mysql日期相关的函数
1、獲取當(dāng)前時(shí)間:
/**
獲得當(dāng)前日期+時(shí)間(date + time)函數(shù):now(), 常用
**/
select now() fromdual;/**
獲取當(dāng)前時(shí)間戳,current_timestamp或者current_timestamp()
**/
select current_timestamp, current_timestamp() fromdual;/**
獲得當(dāng)前日期+時(shí)間(date + time)函數(shù):sysdate(),
和now()不同的是,now() 在執(zhí)行開始時(shí)值就得到了, sysdate() 在函數(shù)執(zhí)行時(shí)動(dòng)態(tài)得到值
**/
select now(), sleep(3), sysdate() from dual;
運(yùn)行結(jié)果:
2、日期/時(shí)間操作
如果在日期列上有索引,在進(jìn)行操作不建議對(duì)這些字段進(jìn)行日期函數(shù)操作,因?yàn)檫@樣該列的索引將無效。應(yīng)該轉(zhuǎn)換一下思路,對(duì)操作的值進(jìn)行函數(shù)操作,而非列。
其中日期格式化的format串有:
說明符
說明
%a
工作日的縮寫名稱? (Sun..Sat)
%b
月份的縮寫名稱? (Jan..Dec)
%c
月份,數(shù)字形式(0..12)
%D
帶有英語后綴的該月日期? (0th, 1st, 2nd, 3rd, ...)
%d
該月日期, 數(shù)字形式 (00..31)
%e
該月日期, 數(shù)字形式(0..31)
%f
微秒 (000000..999999)
%H
小時(shí)(00..23)
%h
小時(shí)(01..12)
%I
小時(shí) (01..12)
%i
分鐘,數(shù)字形式 (00..59)
%j
一年中的天數(shù) (001..366)
%k
小時(shí) (0..23)
%l
小時(shí) (1..12)
%M
月份名稱 (January..December)
%m
月份, 數(shù)字形式 (00..12)
%p
上午(AM)或下午( PM)
%r
時(shí)間 , 12小時(shí)制 (小時(shí)hh:分鐘mm:秒數(shù)ss 后加 AM或PM)
%S
秒 (00..59)
%s
秒 (00..59)
%T
時(shí)間 , 24小時(shí)制 (小時(shí)hh:分鐘mm:秒數(shù)ss)
%U
周 (00..53), 其中周日為每周的第一天
%u
周 (00..53), 其中周一為每周的第一天
%V
周 (01..53), 其中周日為每周的第一天 ; 和 %X同時(shí)使用
%v
周 (01..53), 其中周一為每周的第一天 ; 和 %x同時(shí)使用
%W
工作日名稱 (周日..周六)
%w
一周中的每日 (0=周日..6=周六)
%X
該周的年份,其中周日為每周的第一天, 數(shù)字形式,4位數(shù);和%V同時(shí)使用
%x
該周的年份,其中周一為每周的第一天, 數(shù)字形式,4位數(shù);和%v同時(shí)使用
%Y
年份, 數(shù)字形式,4位數(shù)
%y
年份, 數(shù)字形式 (2位數(shù))
%%
‘%’文字字符
2.1、日期/時(shí)間轉(zhuǎn)字符串、字符串轉(zhuǎn)日期/時(shí)間
常用:
1 /**2 將日期格式化成字符串,mysql在日期的處理上比較寬松,data_format的第一個(gè)參數(shù)是日期格式的字符串其實(shí)也能解析,不過不建議這么操作3 **/
4 select DATE_FORMAT(now(),'%Y%m%d %H:%i:%s');5 select DATE_FORMAT('20160711111203','%Y-%m-%d %H:%i:%s');6
7 /**8 將日期格式的字符串轉(zhuǎn)換成日期/時(shí)間,該format字符串支持date和time9 **/
10 select STR_TO_DATE('2016-07-11 11:12:03','%Y-%m-%d %H:%i:%s');11
12 /**13 將time(不包括日期)轉(zhuǎn)換成字符串形式14 **/
15 select TIME_FORMAT(now(),'%Y%m%d %H:%i:%s');
運(yùn)行結(jié)果:
20160712 11:27:47
2016-07-11 11:12:03
2016-07-11 11:12:03
00000000 11:27:47
其他:
(日期、天數(shù))轉(zhuǎn)換函數(shù):to_days(date), from_days(days)
/**
結(jié)果:736522
**/
select TO_DAYS(now()) fromdual;/**
結(jié)果:1916-07-15
**/
select FROM_DAYS(736522) from dual;
(時(shí)間、秒)轉(zhuǎn)換函數(shù):time_to_sec(time), sec_to_time(seconds)
/**
結(jié)果:3605
**/
select time_to_sec('01:00:05');/**
結(jié)果:01:00:05
**/
select sec_to_time(3605);
拼湊日期、時(shí)間函數(shù):makdedate(year,dayofyear), maketime(hour,minute,second)
/**
結(jié)果:2016-01-30
**/
select makedate(2016,30);/**
結(jié)果:2016-02-01
**/
select makedate(2016,32);/**
結(jié)果:12:15:30
**/
select maketime(12,15,30);
(Unix 時(shí)間戳、日期)轉(zhuǎn)換函數(shù):unix_timestamp(),unix_timestamp(date),from_unixtime(unix_timestamp),from_unixtime(unix_timestamp,format)
select now(),unix_timestamp(); --2016-07-12 11:41:56 , 1468294916
select unix_timestamp('2016-07-12'); --1468252800
select unix_timestamp('2016-07-12 11:38:37'); --1468294717
select from_unixtime(1468294702); --2016-07-12 11:38:22
select from_unixtime(1468294717); --2016-07-12 11:38:37
select from_unixtime(1468294717, '%Y %D %M %h:%i:%s %x'); --2016 12th July 11:38:37 2016
2.2、日期計(jì)算函數(shù)
日期/時(shí)間的加減:DATE_ADD(date,INTERVAL expr type) 、DATE_SUB(date,INTERVAL expr type)
還有幾個(gè)跟上面2個(gè)方法差不多的方法,不過可以用上面2個(gè)替換掉
/**
和DATE_ADD()是一樣的
**/ADDDATE(date,INTERVAL expr type)/**
簡寫,直接加多少天,例如:select ADDDATE(now(),1)
**/ADDDATE(expr,days)/**
和DATE_SUB()是一樣的
**/SUBDATE(date,INTERVAL expr unit)/**
簡寫,直接減多少天,例如:select SUBDATE(now(),1)
**/SUBDATE(expr,days)
另外還有ADDTIME(expr1,expr2)、 SUBTIME(expr1,expr2)
例子:
/**
增加一天 數(shù)字為負(fù)數(shù)則為減一天
結(jié)果為:2016-07-12 14:16:13 , 2016-07-13 14:16:13
**/
select now(),date_add(now(), interval 1 day);/**
減掉一天
結(jié)果為:2016-07-12 14:16:13 , 2016-07-11 14:16:13
**/
select now(),date_sub(now(), interval 1 day);/**
復(fù)合型相減
結(jié)果為:2016-07-12 14:20:05 , 2015-05-12 14:20:05
其中'1 2'中間的分隔符可為:空格 或者 - 或者 ,
**/
select now(),date_sub(now(), interval '1 2' YEAR_MONTH);
其中type的可選值有:
MICROSECOND
間隔單位:毫秒
SECOND
間隔單位:秒
MINUTE
間隔單位:分鐘
HOUR
間隔單位:小時(shí)
DAY
間隔單位:天
WEEK
間隔單位:星期
MONTH
間隔單位:月
QUARTER
間隔單位:季度
YEAR
間隔單位:年
SECOND_MICROSECOND
復(fù)合型,間隔單位:秒、毫秒,expr可以用兩個(gè)值來分別指定秒和毫秒
MINUTE_MICROSECOND
復(fù)合型,間隔單位:分、毫秒
MINUTE_SECOND
復(fù)合型,間隔單位:分、秒
HOUR_MICROSECOND
復(fù)合型,間隔單位:小時(shí)、毫秒
HOUR_SECOND
復(fù)合型,間隔單位:小時(shí)、秒
HOUR_MINUTE
復(fù)合型,間隔單位:小時(shí)分
DAY_MICROSECOND
復(fù)合型,間隔單位:天、毫秒
DAY_SECOND
復(fù)合型,間隔單位:天、秒
DAY_MINUTE
復(fù)合型,間隔單位:天、分
DAY_HOUR
復(fù)合型,間隔單位:天、小時(shí)
YEAR_MONTH
復(fù)合型,間隔單位:年、月
2.3、計(jì)算日期/時(shí)間的差
計(jì)算日期(day)的差:DATEDIFF(expr1,expr2), 結(jié)果為:expr1-expr2
select DATEDIFF(now(),date_add(now(), interval 1 day)); ---1
select DATEDIFF(now(),now()); --0
計(jì)算時(shí)間差:TIMEDIFF(expr1,expr2),結(jié)果為:expr1-expr2,格式為: 小時(shí):分:秒
/**
結(jié)果為:2016-07-12 14:40:03 2016-07-12 18:00:03 03:20:00
**/
select now(),DATE_ADD(now(),INTERVAL 200 minute),TIMEDIFF(DATE_ADD(now(),INTERVAL 200 minute),now())
計(jì)算指定單位的差:TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2),其中unit參考上面的type的那個(gè)表格,計(jì)算過程是:datetime_expr2-datetime_expr1
/**
結(jié)果:2016-07-12 14:51:50 2016-07-12 15:51:50 1
**/
select now(),DATE_ADD(now(),INTERVAL 1 hour),TIMESTAMPDIFF(HOUR,now(),DATE_ADD(now(),INTERVAL 1 hour))
總結(jié)
以上是生活随笔為你收集整理的mySQL日期函数并运行_mysql日期相关的函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 更改root密码字段不存在_
- 下一篇: mysql表变量临时表_表变量和临时表详