獲取
獲取日期值
CURDATE()
CURRENT_DATE()
以'YYYY-MM-DD'或YYYYMMDD格式返回當前日期值(根據返回值所處上下文是字符串或數字)
mysql> select CURDATE();
-> '1997-12-15'
mysql> selec t CURDATE() 0;
-> 19971215
獲取時間值
CURTIME()
CURRENT_TIME()
以'YYYY-MM-DD'或YYYYMMDD格式返回當前日期值(根據返回值所處上下文是字符串或數字)
mysql> select CURDATE();
-> '1997-12-15'
mysql> select CURDATE() 0;
-> 19971215
獲取日期和時間值
NOW()
SYSDATE()
CURRENT_TIMESTAMP
CURRENT_TIMESTAMP()
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回當前日期時間(根據返回值所處上下文是字符串或數字)
mysql> select NOW();
-> '1997-12-15 23:50:26'
mysql> select NOW() 0;
-> 19971215235026
獲取unix時間戳 至今或某個時間的秒數
UNIX_TIMESTAMP()
UNIX_TIMESTAMP(date)
通過unix時間戳獲取對應的日期
FROM_UNIXTIME(unix_timestamp,format)
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回時間戳的值(根據返回值所處上下文是字符串或數字)
mysql> select FROM_UNIXTIME(875996580);
-> '1997-10-04 22:23:00'
mysql> select FROM_UNIXTIME(875996580) 0;
-> 19971004222300
select from_unixtime(1218169800, '%Y %D %M %h:%i:%s %x'); -- '2008 8th August 12:30:00 2008'
格式化返回的unix日期值
FROM_UNIXTIME(unix_timestamp,format)
mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),'%Y %D %M %h:%i:%s %x');
-> '1997 23rd December 03:43:30 x'
獲取uct時間日期函數
utc_date(), utc_time(), utc_timestamp()
mysql> select utc_timestamp(), utc_date(), utc_time(), now()
+---------------------+------------+------------+---------------------+
| utc_timestamp() | utc_date() | utc_time() | now() |
+---------------------+------------+------------+---------------------+
| 2008-08-08 14:47:11 | 2008-08-08 | 14:47:11 | 2008-08-08 22:47:11 |
因爲我國位於東八時區,所以本地時間 = UTC 時間 + 8 小時。UTC 時間在業務涉及多個國家和地區的時候,非常有用。
獲取月份中最後一天
last_day()
select last_day('2008-02-01'); -- 2008-02-29
select last_day('2008-08-08'); -- 2008-08-31
MySQL last_day() 函數非常有用,比如我想得到當前月份中有多少天,可以這樣來計算:
mysql> select now(), day(last_day(now())) as days;
由一個date日期得到
由一個日期得到是星期幾
DAYOFWEEK(date)
返回日期date是星期幾(1=星期天,2=星期一,……7=星期六,ODBC標準)
mysql> select DAYOFWEEK('1998-02-03');
-> 3
或
WEEKDAY(date)
返回日期date是星期幾(0=星期一,1=星期二,……6= 星期天)。
mysql> select WEEKDAY('1997-11-05');
-> 2
由一個日期得到是當月的第幾天
DAYOFMONTH(date)
返回date是一月中的第幾日(在1到31範圍內)
mysql> select DAYOFMONTH('1998-02-03');
-> 3
由一個日期得到是當年的第幾天
DAYOFYEAR(date)
返回date是一年中的第幾日(在1到366範圍內)
mysql> select DAYOFYEAR('1998-02-03');
-> 34
由一個日期得到是0年開始的第幾天
TO_DAYS(date)
給出一個日期date,返回一個天數(從0年的天數)。
mysql> select TO_DAYS(950501);
-> 728779
由0年到現在的天數得出日期
FROM_DAYS(n)
mysql> select FROM_DAYS(729669);
-> '1997-10-07'
由一個日期得到是年、月、日的數值
YEAR(date)、MONTH(date)、DAY(date)
mysql> select MONTH('1998-02-03');
-> 2
由一個日期得到是月、日的英文名稱
DAYNAME(date)、MONTH(date)
mysql> select MONTHNAME("1998-02-05");
-> 'February'
由一個日期得到是當年的第幾季度
QUARTER(date)
mysql> select QUARTER('98-04-01');
-> 2
由一個日期得到是當年的第幾周
WEEK(date,first)
返回date是一年的第幾周(first默認值0,first取值1表示週一是周的開始,0從週日開始)
mysql> select WEEK('1998-02-20');
-> 7
有一個時間time可以得到
由一個時間得到小時、分鐘、秒數
HOUR(time)、MINUTE(time)、SECOND(time)
把時間轉換成秒數
TIME_TO_SEC(time)
返回time值有多少秒
mysql> select TIME_TO_SEC('22:23:00');
-> 80580
mysql> select TIME_TO_SEC('00:39:38');
-> 2378
吧秒數轉換成日期
SEC_TO_TIME(seconds)
mysql> select SEC_TO_TIME(2378);
-> '00:39:38'
mysql> select SEC_TO_TIME(2378) 0;
-> 3938
比較日期和時間
取得兩個日期之間相差的月份
PERIOD_DIFF(P1,P2)返回在時期P1和P2之間月數(P1和P2的格式YYMM或YYYYMM)
mysql> select PERIOD_DIFF(9802,199703);
-> 11
計算日期和時間
DATE_ADD(date,INTERVAL expr type)
DATE_SUB(date,INTERVAL expr type)
ADDDATE(date,INTERVAL expr type)
SUBDATE(date,INTERVAL expr type)
TIME_ADD().....
對日期時間進行加減法運算
(ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同義詞,也可以用運算符和-而不是函數
date是一個DATETIME或DATE值,expr對date進行加減法的一個表達式字符串type指明表達式expr應該如何被解釋
[type值 含義 期望的expr格式]:
SECOND 秒 SECONDS
MINUTE 分鐘 MINUTES
HOUR 時間 HOURS
DAY 天 DAYS
MONTH 月 MONTHS
YEAR 年 YEARS
MINUTE_SECOND 分鐘和秒 "MINUTES:SECONDS"
HOUR_MINUTE 小時和分鐘 "HOURS:MINUTES"
DAY_HOUR 天和小時 "DAYS HOURS"
YEAR_MONTH 年和月 "YEARS-MONTHS"
HOUR_SECOND 小時, 分鐘, "HOURS:MINUTES:SECONDS"
DAY_MINUTE 天, 小時, 分鐘 "DAYS HOURS:MINUTES"
DAY_SECOND 天, 小時, 分鐘, 秒 "DAYS HOURS:MINUTES:SECONDS"
expr中允許任何標點做分隔符,如果所有是DATE值時結果是一個DATE值,否則結果是一個DATETIME值)
如果type關鍵詞不完整,則MySQL從右端取值,DAY_SECOND因爲缺少小時分鐘等於MINUTE_SECOND)
如果增加MONTH、YEAR_MONTH或YEAR,天數大於結果月份的最大天數則使用最大天數)
mysql> SELECT "1997-12-31 23:59:59" INTERVAL 1 SECOND;
-> 1998-01-01 00:00:00
mysql> SELECT INTERVAL 1 DAY "1997-12-31";
-> 1998-01-01
mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND;
-> 1997-12-31 23:59:59
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 SECOND);
-> 1998-01-01 00:00:00
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 DAY);
-> 1998-01-01 23:59:59
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL "1:1" MINUTE_SECOND);
-> 1998-01-01 00:01:00
mysql> SELECT DATE_SUB("1998-01-01 00:00:00",INTERVAL "1 1:1:1" DAY_SECOND);
-> 1997-12-30 22:58:59
mysql> SELECT DATE_ADD("1998-01-01 00:00:00", INTERVAL "-1 10" DAY_HOUR);
-> 1997-12-30 14:00:00
mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);
-> 1997-12-02
截取某個數字
EXTRACT(datetime)
mysql> SELECT EXTRACT(YEAR FROM "1999-07-02");
-> 1999
mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");
-> 199907
mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");
-> 20102
本文來自CSDN博客,轉載請標明出處:http://www.cnblogs.com/zeroone/archive/2010/05/05/1727659.html
格式化日期和時間輸入
TIME_FORMAT(time,format)
和DATE_FORMAT()類似,但TIME_FORMAT只處理小時、分鐘和秒(其餘符號產生一個NULL值或0)
DATE_FORMAT(date,format)
根據format字符串格式化date值
(在format字符串中可用標誌符:
%M 月名字(January……December)
%W 星期名字(Sunday……Saturday)
%D 有英語前綴的月份的日期(1st, 2nd, 3rd, 等等。)
%Y 年, 數字, 4 位
%y 年, 數字, 2 位
%a 縮寫的星期名字(Sun……Sat)
%d 月份中的天數, 數字(00……31)
%e 月份中的天數, 數字(0……31)
%m 月, 數字(01……12)
%c 月, 數字(1……12)
%b 縮寫的月份名字(Jan……Dec)
%j 一年中的天數(001……366)
%H 小時(00……23)
%k 小時(0……23)
%h 小時(01……12)
%I 小時(01……12)
%l 小時(1……12)
%i 分鐘, 數字(00……59)
%r 時間,12 小時(hh:mm:ss [AP]M)
%T 時間,24 小時(hh:mm:ss)
%S 秒(00……59)
%s 秒(00……59)
%p AM或PM
%w 一個星期中的天數(0=Sunday ……6=Saturday )
%U 星期(0……52), 這裏星期天是星期的第一天
%u 星期(0……52), 這裏星期一是星期的第一天
%% 字符% )
mysql> select DATE_FORMAT('1997-10-04 22:23:00','%W %M %Y');
-> 'Saturday October 1997'
mysql> select DATE_FORMAT('1997-10-04 22:23:00','%H:%i:%s');
-> '22:23:00'
mysql> select DATE_FORMAT('1997-10-04 22:23:00','%D %y %a %d %m %b %j');
-> '4th 97 Sat 04 10 Oct 277'
mysql> select DATE_FORMAT('1997-10-04 22:23:00','%H %k %I %r %T %S %w');
-> '22 22 10 10:23:00 PM 22:23:00 00 6'
本文來自CSDN博客,轉載請標明出處:http://www.cnblogs.com/zeroone/archive/2010/05/05/1727659.html
數據類型轉換
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
MySQL 拼湊日期、時間函數:
makdedate(year,dayofyear)
maketime(hour,minute,second)
select makedate(2001,31); -- '2001-01-31'
select makedate(2001,32); -- '2001-02-01'
select maketime(12,15,30); -- '12:15:30'
MySQL 時間戳(timestamp)轉換、增、減函數:
timestamp(date) -- date to timestamp
timestamp(dt,time) -- dt + time
timestampadd(unit,interval,datetime_expr) --
timestampdiff(unit,datetime_expr1,datetime_expr2) --
請看示例部分:
select timestamp('2008-08-08'); -- 2008-08-08 00:00:00
select timestamp('2008-08-08 08:00:00', '01:01:01'); -- 2008-08-08 09:01:01
select timestamp('2008-08-08 08:00:00', '10 01:01:01'); -- 2008-08-18 09:01:01
select timestampadd(day, 1, '2008-08-08 08:00:00'); -- 2008-08-09 08:00:00
select date_add('2008-08-08 08:00:00', interval 1 day); -- 2008-08-09 08:00:00
MySQL timestampadd() 函數類似於 date_add()。
select timestampdiff(year,'2002-05-01','2001-01-01'); -- -1
select timestampdiff(day ,'2002-05-01','2001-01-01'); -- -485
select timestampdiff(hour,'2008-08-08 12:00:00','2008-08-08 00:00:00'); -- -12
select datediff('2008-08-08 12:00:00', '2008-08-01 00:00:00'); -- 7
MySQL timestampdiff() 函數就比 datediff() 功能強多了,datediff() 只能計算兩個日期(date)之間相差的天數。
時區處理函數
convert_tz(dt,from_tz,to_tz)
select convert_tz('2008-08-08 12:00:00', '+08:00', '+00:00'); -- 2008-08-08 04:00:00
時區轉換也可以通過 date_add, date_sub, timestampadd 來實現。
select date_add('2008-08-08 12:00:00', interval -8 hour); -- 2008-08-08 04:00:00
select date_sub('2008-08-08 12:00:00', interval 8 hour); -- 2008-08-08 04:00:00
select timestampadd(hour, -8, '2008-08-08 12:00:00'); -- 2008-08-08 04:00:00
其他
PERIOD_ADD(P,N)
增加N個月到時期P並返回(P的格式YYMM或YYYYMM)
mysql> select PERIOD_ADD(9801,2);
-> 199803
TO_DAYS(date)
返回日期date是西元0年至今多少天(不計算1582年以前)
mysql> select TO_DAYS(950501);
-> 728779
mysql> select TO_DAYS('1997-10-07');
-> 729669
FROM_DAYS(N)
給出西元0年至今多少天返回DATE值(不計算1582年以前)
mysql> select FROM_DAYS(729669);
-> '1997-10-07'
MySQL 日期、時間相減函數:
datediff(date1,date2)
timediff(time1,time2)
截取函數
1. 選取日期時間的各個部分:日期、時間、年、季度、月、日、小時、分鐘、秒、微秒
set @dt = '2008-09-10 07:15:30.123456';
select date(@dt); -- 2008-09-10
select time(@dt); -- 07:15:30.123456
select year(@dt); -- 2008
select quarter(@dt); -- 3
select month(@dt); -- 9
select week(@dt); -- 36
select day(@dt); -- 10
select hour(@dt); -- 7
select minute(@dt); -- 15
select second(@dt); -- 30
select microsecond(@dt); -- 123456
select yearweek(@dt); -- 200836 返回的year()函數和week()函數,
2. MySQL Extract() 函數,可以上面實現類似的功能:
set @dt = '2008-09-10 07:15:30.123456';
select extract(year from @dt); -- 2008
select extract(quarter from @dt); -- 3
select extract(month from @dt); -- 9
select extract(week from @dt); -- 36
select extract(day from @dt); -- 10
select extract(hour from @dt); -- 7
select extract(minute from @dt); -- 15
select extract(second from @dt); -- 30
select extract(microsecond from @dt); -- 123456
select extract(year_month from @dt); -- 200809
select extract(day_hour from @dt); -- 1007
select extract(day_minute from @dt); -- 100715
select extract(day_second from @dt); -- 10071530
select extract(day_microsecond from @dt); -- 10071530123456
select extract(hour_minute from @dt); -- 715
select extract(hour_second from @dt); -- 71530
select extract(hour_microsecond from @dt); -- 71530123456
select extract(minute_second from @dt); -- 1530
select extract(minute_microsecond from @dt); -- 1530123456
select extract(second_microsecond from @dt); -- 30123456
MySQL Extract() 函數除了沒有date(),time() 的功能外,其他功能一應具全。並且還具有選取‘day_microsecond’ 等功能。注意這裏不是隻選取 day 和 microsecond,而是從日期的 day 部分一直選取到 microsecond 部分。夠強悍的吧!
MySQL Extract() 函數唯一不好的地方在於:你需要多敲幾次鍵盤。
歸類
MySQL dayof... 函數:dayofweek(), dayofmonth(), dayofyear()
MySQL week... 函數:week(), weekofyear(), dayofweek(), weekday(), yearweek()
MySQL 返回星期和月份名稱函數:dayname(), monthname()