程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MYSQL基礎03(日期函數)

MYSQL基礎03(日期函數)

編輯:MySQL綜合教程

MYSQL基礎03(日期函數)


  工作中對日期的處理是經常遇到的,需求可能多種多樣,因此重點介紹。   1.獲取當前日期     select NOW() -- 結果:2015-10-28 22:41:11 select NOW(),SLEEP(3),NOW() -- 結果 2015-10-28 22:43:34  0  2015-10-28 22:43:34   SELECT SYSDATE(),SLEEP(3),SYSDATE() -- 結果 2015-10-28 22:46:48  0  2015-10-28 22:46:52 -- NOW()是sql執行前就得到,而SYSDATE()是該函數執行時才得到,一般來說NOW()已經足夠,所以更常用   2.日期格式化   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), 這裡星期一是星期的第一天   %% 字符% )   -- 根據上面的參數,我們可以得到各種各樣的日期格式,比mssql的convert函數強大太多了,以下是常用的標准日期格式 SELECT DATE_FORMAT(NOW(),'%Y-%m-%d') -- 2015-10-28 SELECT DATE_FORMAT(NOW(),'%y-%m-%d') -- 15-10-28 SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%m:%s') -- 2015-10-28 22:10:56 3.日期截取     -- 獲取日期當天是星期幾(1=星期天,2=星期一....7=星期六) SELECT DAYOFWEEK(now())  -- 獲取日期當天是幾號  SELECT DAYOFMONTH('2015-10-28')  -- 結果28 -- 獲取日期當天是一年中的第幾天 SELECT DAYOFYEAR('2015-10-28')  -- 結果 301   -- 獲取日期的年份 SELECT YEAR('2015-10-28') -- 結果 2015 -- 獲取日期第幾季度 SELECT QUARTER('2015-10-28')  -- 結果 4 -- 獲取日期的月份 SELECT MONTH('2015-10-28') -- 結果 10 -- 獲取日期是第幾周 SELECT WEEK('2015-10-28')  -- 結果43 (默認星期天為一周的第一天) SELECT WEEK('2015-10-28',0)  -- 結果43 (星期天為一周的第一天) SELECT WEEK('2015-10-28',1)  -- 結果44 (星期一為一周的第一天) -- 獲取日期的小時 SELECT HOUR('2015-10-28 23:11:56') -- 結果 23 -- 獲取日期的分鐘 SELECT MINUTE('2015-10-28 23:11:56') -- 結果 11 -- 獲取日期的秒鐘 SELECT SECOND('2015-10-28 23:11:56') -- 結果 56 -- 獲取日期部分 SELECT DATE('2015-10-28 23:11:56') -- 結果'2015-10-28' -- 獲取時間部分 SELECT TIME('2015-10-28 23:11:56') -- 結果'23:11:56'   4.日期運算   DATE_ADD(date,INTERVAL expr type)    [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,天數大於結果月份的最大天數則使用最大天數)      -- 說明 正號為加法,負號為減法 -- 增加4天 SELECT DATE_ADD('2015-10-28 23:11:56', INTERVAL 4 DAY ) --2015-11-01 23:11:56 -- 減少3天 SELECT DATE_ADD('2015-10-28 23:11:56', INTERVAL -3 DAY ) -- 2015-10-25 23:11:56 -- 增加1年 SELECT DATE_ADD('2015-10-28 23:11:56', INTERVAL 1 YEAR ) --  2016-10-28 23:11:56 -- 增加1天3小時 SELECT DATE_ADD('2015-10-28 23:11:56', INTERVAL '1 3' DAY_HOUR ) -- 2015-10-27 20:11:56 -- 減1天1小時1分1秒 SELECT DATE_ADD('2015-10-28 23:11:56', INTERVAL '-1 1:1:1' DAY_SECOND) -- 2015-10-27 22:10:55   5.日期比較   -- 計算2個日期間隔的天數 SELECT DATEDIFF('2015-10-28','2015-10-26')  -- 結果2 -- 計算2個日期間隔的時分秒 SELECT TIMEDIFF('2015-10-28 23:11:56','2015-10-28 20:11:56') -- 結果 03:00:00 6.日期轉化     -- 將日期轉化為天數 (西元0年至今多少天) SELECT TO_DAYS('2015-10-28 23:11:56') -- 結果 736264 SELECT TO_DAYS('0000-00-00 00:00:00') -- 結果 0 -- 將日期轉化為秒數 (從'1970-01-01 00:00:00'GMT開始的秒數) select UNIX_TIMESTAMP('2015-10-28 23:11:56') -- 結果 1446045116   -- 將時間轉化為秒數 SELECT TIME_TO_SEC('01:00:05'); -- 結果 3605 -- 將秒數轉化為日期 SELECT SEC_TO_TIME(3605); -- '01:00:05'   以上 ,參考資料:http://www.Bkjia.com/database/201202/118061.html   注意問題   1. DATE_FORMAT   -- 錯誤示例 SELECT * FROM mytable WHERE create_date>=DATE_FORMAT(NOW(),'%Y-%m-%d') -- 說明: DATE_FORMAT返回的是字符串,所以不能直接與日期字段比較,這個問題我工作中已經遇到過了   -- 解決辦法 使用DATE,返回日期類型 SELECT * FROM mytable WHERE create_date>=DATE(NOW());   功能實現   -- 根據日期獲取當月初與當月末 SET @DATE_B:=DATE(DATE_FORMAT('2015-10-28','%Y-%m-1')); SET @DATE_E:=DATE_ADD(DATE_ADD(@DATE_B,INTERVAL 1 MONTH),INTERVAL -1 DAY); SELECT @DATE_B,@DATE_E

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved