CONVERT_TZ(dt ,from_tz ,to_tz ) eg SELECT now(), CONVERT_TZ (now(), '+8:00', '-8:00') as los; //時區轉換也能夠經過 date_add, date_sub, timestampadd 來實現
get_format(date|time|datetime, 'eur'|'usa'|'jis'|'iso'|'internal' eg select get_format(date,'usa'); -- %m.%d.%Y select get_format(time,'usa'); -- %h:%i:%s %p select get_format(datetime,'usa'); -- %Y-%m-%d %H.%i.%s //函數使用說明: CONVERT_TZ() 將時間日期值 dt 從 from_tz 給出的時區轉到 to_tz 給出的時區,而後返回結果值。 關於可能指定的時區的詳細論述,若自變量無效,則這個函數會返回 NULL
select now() -- 日期+時間 select sysdate() -- 日期+時間 select current_timestamp() -- 日期+時間 select localtime() -- 日期+時間 select localtimestamp() -- 日期+時間 select curdate() -- 日期 select curtime() -- 時間 select current_time() -- 時間
sysdate() 日期時間函數跟 now() 相似,不一樣之處在於:now() 在執行開始時值就獲得了, sysdate() 在函數執行時動態獲得值
eg:select now(), sleep(3), now(); select sysdate(), sleep(3), sysdate();mysql
select UNIX_TIMESTAMP('2016-12-04 16:30:28') -- 把時間轉換成時間戳 select FROM_UNIXTIME('1480581161',"%Y/%m/%d") -- 時間戳轉換成時間 select time_to_sec('01:00:05'); -- 時間轉換成秒 3605 select sec_to_time(3605); -- 秒轉換成時間 '01:00:05' select to_days('2008-08-08'); -- 日期轉換整天數 733627 select from_days(733627); -- 天數轉換成日期 '2008-08-08' select date_format(now(),'%Y/%m/%d') -- 日期轉化爲字符串 select time_format('22:23:01', '%H.%i.%s'); -- 字符串轉化爲時間 select str_to_date('12.12.2016 14:09:30', '%m.%d.%Y %H:%i:%s'); -- 字符串轉換爲日期 2016-12-12 14:09:30
set @dt = '2016-12-12 11:00:19.123456'; select date(@dt); -- 2016-12-12(日期類型) select time(@dt); -- 11:00:19.123456(日期類型) select year(@dt); -- 2016 select quarter(@dt); -- 4 (返回的一年日期,取值範圍爲1至4季度) select month(@dt); -- 12 select week(@dt); -- 50 select day(@dt); -- 12 select hour(@dt); -- 11 select minute(@dt); -- 0 select second(@dt); -- 19 select microsecond(@dt); -- 123456(返回微秒,在mysql中我沒有找到顯示當前微妙的函數,now()只精確到秒,也沒有找到能夠儲存微妙的日期類型,,好玩的是卻能夠抽取微秒) select dayofweek(@dt); -- 2 (從週日算起) select dayofmonth(@dt); -- 12 select dayofyear(@dt); -- 347 select week(@dt); -- 50(有mode參數) select weekofyear(@dt); -- 50 select dayofweek(@dt); -- 2 select weekday(@dt); -- 0(返回日期的星期索引0=週一,1=週二,6=星期日) select yearweek(@dt); -- 201650(獲取年份和週數)(有mode參數) select dayname(@dt); -- Monday select monthname(@dt); -- December select last_day(@dt); -- 2016-12-31(返回該月份的最後一天)
mode 參數相關 (用法 eg: select week(@dt,3)😉sql
模式 | 星期的第一天 | 範圍 | 星期 1 是第一天 |
---|---|---|---|
0 | Sunday | 0-53 | 一年中多一個星期天 |
1 | Monday | 0-53 | 一年多3天 |
2 | Sunday | 1-53 | 一年中多一個星期天 |
3 | Monday | 1-53 | 一年多3天 |
4 | Sunday | 0-53 | 一年多3天 |
5 | Monday | 0-53 | 一年中多一個星期一 |
6 | Sunday | 1-53 | 一年多3天 |
7 | Monday | 1-53 | 一年中多一個星期一 |
extract()選取函數數據庫
set @dt = '2016-12-12 11:21:19.123456'; select extract(year from @dt); -- 2016 select extract(quarter from @dt); -- 4 select extract(month from @dt); -- 12 select extract(week from @dt); -- 50 select extract(day from @dt); -- 12 select extract(hour from @dt); -- 11 select extract(minute from @dt); -- 21 select extract(second from @dt); -- 19 select extract(microsecond from @dt); -- 123456 select extract(year_month from @dt); -- 201712 select extract(day_hour from @dt); -- 1211 select extract(day_minute from @dt); -- 121121 select extract(day_second from @dt); -- 12112119 select extract(day_microsecond from @dt); -- 12112119123456 select extract(hour_minute from @dt); -- 1121 select extract(hour_second from @dt); -- 112119 select extract(hour_microsecond from @dt); -- 112119123456 select extract(minute_second from @dt); -- 2119 select extract(minute_microsecond from @dt); -- 2119123456 select extract(second_microsecond from @dt); -- 19123456
MySQL Extract() 函數除了沒有date(),time() 的功能外,其餘功能一應具全。而且還具備選取‘day_microsecond’ 等功能。注意這裏不是隻選取 day 和 microsecond,而是從日期的 day 部分一直選取到 microsecond 部分。ide
set @dt = '2016-12-12 11:21:19.123456'; select date_add(@dt, interval 1 day); -- 2016-12-13 11:21:19.123456 select date_add(@dt, interval 1 hour); -- 2016-12-12 12:21:19.123456 select date_add(@dt, interval 1 minute); -- 2016-12-12 11:22:19.123456 select date_add(@dt, interval 1 second); -- 2016-12-12 11:21:20.123456 select date_add(@dt, interval 1 microsecond); -- 2016-12-12 11:21:19.123457 select date_add(@dt, interval 1 week); -- 2016-12-19 11:21:19.123456 select date_add(@dt, interval 1 month); -- 2017-01-12 11:21:19.123456 select date_add(@dt, interval 1 quarter); -- 2017-03-12 11:21:19.123456 select date_add(@dt, interval 1 year); -- 2017-12-12 11:21:19.123456 select date_add(@dt, interval -1 day); -- 2016-12-11 11:21:19.123456 select date_add(@dt, interval '01:15:30' hour_second); -- 2016-12-12 12:36:49.123456 select date_add(@dt, interval '1 01:15:30' day_second); -- 2016-12-13 12:36:49.123456 select date_sub(@dt, interval '1 1:1:1' day_second); -- 2016-12-11 10:20:18.123456 -- 用法同 date_add select period_add(@dt,2); -- 202106 (日期加/減去N月,返回到月) select timestampadd(day, 1, '2016-12-12 12:00:00'); -- 2016-12-13 12:00:00 select timestampadd(day, 3, now()); -- 查詢三天後的日期
set @dt2 = '2010-10-10 10:10:10.123456'; set @dt1 = '2011-12-13 14:15:16.223456'; select datediff(@dt1,@dt2); -- 429(返回天數) select timediff(@dt1,@dt2); -- 838:59:59.000000(返回日期類型,返回time差值) select period_diff(@dt1,@dt2); -- 1 (返回月數) select timestampdiff(unit,datetime_expr1,datetime_expr2) eg: select timestampdiff(year,@dt1,@dt2); -- -1 select timestampdiff(day ,@dt1,@dt2); -- -429 select timestampdiff(hour,@dt1,@dt2); -- -10300
makdedate(year,dayofyear) eg select makedate(2001,32); -- '2001-02-01' maketime(hour,minute,second) eg select maketime(12,15,30); -- '12:15:30'
%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), 這裏星期一是星期的第一天
表tablename,添加時間是insert_time字段,該字段爲int(5)類型的,現須要查詢今天添加的文章總數而且按照時間從大到小排序,則查詢語句以下: select * from tablename where date_format(from_UNIXTIME(insert_time),'%Y-%m-%d') = date_format(now(),'%Y-%m-%d'); 或者: select * from tablename where to_days(date_format(from_UNIXTIME(insert_time),'%Y-%m-%d')) = to_days(now()); 表的insert_time字段的存儲類型是DATETIME類型或者TIMESTAMP類型,則查詢語句也可按以下寫法: 查詢今天的信息記錄: select * from tablename where to_days(insert_time) = to_days(now()); 查詢昨天的信息記錄: select * from tablename where to_days(now()) - to_days(insert_time) <= 1; 查詢近7天的信息記錄: select * from tablename where date_sub(curdate(), INTERVAL 7 DAY) <= date(insert_time); 查詢近30天的信息記錄: select * from tablename where date_sub(curdate(), INTERVAL 30 DAY) <= date(insert_time); 查詢本月的信息記錄: select * from tablename where date_format(insert_time, '%Y%m') = date_format(curdate() , '%Y%m'); 查詢上一月的信息記錄: select * from tablename where period_diff(date_format(now() , '%Y%m') , date_format(insert_time, '%Y%m')) =1;
轉載請註明出處!函數