首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 常用日期時間與數值函數完整參考指南

     編輯:MySQL 資料庫相關知識

一、日期時間函數

1. 時間與秒互轉

函數說明示例結果
TIME_TO_SEC(time)時間轉總秒數TIME_TO_SEC('01:01:01')3661
SEC_TO_TIME(seconds)秒數轉時間SEC_TO_TIME(3661)'01:01:01'

2. 日期與天數互轉

函數說明示例結果
TO_DAYS(date)日期轉天數(從年份 0 開始)TO_DAYS('0001-01-01')366
FROM_DAYS(days)天數轉日期FROM_DAYS(366)'0001-01-01'

3. 字符串與日期互轉

函數說明示例
STR_TO_DATE(str, format)按格式解析字符串為日期STR_TO_DATE('2013-01-01 01:21:01', '%Y-%m-%d %H:%i:%s')
DATE_FORMAT(date, format)日期格式化為字符串DATE_FORMAT('2013-01-01 01:21:01', '%Y%m%d %H%i%s') → '20130101 012101'
TIME_FORMAT(time, format)時間格式化為字符串TIME_FORMAT('01:21:01', '%H%i%s') → '012101'

4. 常用格式符號速查表

符號含義
%Y4位年份
%m月份 (01-12)
%d日期 (00-31)
%H小時 24制 (00-23)
%i分鐘 (00-59)
%s秒 (00-59)
%W星期名稱 (Sunday...)
%M月份名稱 (January...)
%%字面 % 符號

5. 日期成分提取函數

函數說明示例 (假設 NOW() = '2013-05-16 16:31:34')
DATE(expr)提取日期部分'2013-05-16'
YEAR(expr)年份2013
MONTH(expr)月份5
DAY(expr)日期16
HOUR(expr)小時16
MINUTE(expr)分鐘31
SECOND(expr)秒34
WEEKDAY(expr)星期索引 (0=周一)3 (周四)
WEEK(expr[,mode])一年中的週數19/20 (mode=0/1)
QUARTER(expr)季度 (1-4)2
DAYOFWEEK(expr)星期索引 (1=周日)5
DAYOFMONTH(expr)月中的天16
DAYOFYEAR(expr)年中的天136
DAYNAME(expr)星期名稱'Thursday'
MONTHNAME(expr)月份名稱'May'

6. 當前日期時間獲取

函數說明差異
NOW()語句開始執行時間語句內多次調用返回相同值
SYSDATE()實時獲取時間語句內多次調用可能不同
CURDATE()當前日期字符串語境 'YYYY-MM-DD'
CURTIME()當前時間字符串語境 'HH:MM:SS'
CURRENT_TIMESTAMP()同 NOW()標準 SQL 函數

7. Unix 時間戳互轉

函數說明示例
UNIX_TIMESTAMP([date])日期轉時間戳 (秒)UNIX_TIMESTAMP('2013-05-16 01:01:01') → 1368637261
FROM_UNIXTIME(ts[,format])時間戳轉日期FROM_UNIXTIME(1368637261) → '2013-05-16 01:01:01'

8. 日期運算

DATE_ADD(date, INTERVAL expr unit)  -- 加法
DATE_SUB(date, INTERVAL expr unit)  -- 減法

常用單位:SECOND, MINUTE, HOUR, DAY, MONTH, YEAR, DAY_SECOND, DAY_MINUTE, DAY_HOUR, YEAR_MONTH 等。

示例結果
DATE_ADD('2013-05-16 01:01:01', INTERVAL 1 DAY)'2013-05-17 01:01:01'
DATE_ADD('2013-05-16 01:01:01', INTERVAL '1 1:1:1' DAY_SECOND)'2013-05-17 02:02:02'

9. 日期差值

函數說明示例
DATEDIFF(date1, date2)日期差天數 (忽略時間)DATEDIFF('2013-05-16', '2013-05-17') → -1
TIMEDIFF(time1, time2)時間差 (HH:MM:SS)TIMEDIFF('00:00:00', '11:11:11') → '-11:11:11'

10. 月末日期

LAST_DAY(date)  -- 返回該月最後一天

11. 日期類型對比

在 WHERE 條件中可直接使用字符串字面量與日期列比較:

SELECT * FROM tab WHERE createtime > '2013-05-14 00:00:00';
SELECT * FROM tab WHERE createtime BETWEEN '2013-05-14' AND '2013-05-15';

二、數值函數

函數說明示例結果
ABS(x)絕對值ABS(-2)2
FLOOR(x)向下取整FLOOR(-2.45)-3
MOD(n,m)取模 (余數)MOD(3,2)1
RAND([seed])隨機數 0-1RAND(2)0.6555... (固定種子可重現)
ROUND(x[,d])四捨五入ROUND(2.432,2) / ROUND(12.432,-1)2.43 / 10

使用建議

  • 日期比較優先使用字符串字面量 'YYYY-MM-DD',可讀性強且利用索引。
  • NOW() vs SYSDATE():存儲過程/觸發器中需實時時間用 SYSDATE()。
  • ROUND(x, -n) 可用於金額按 10/100/1000 取整。
  • RAND(seed) 固定種子可用於測試數據生成的可重現性。

掌握這些核心函數,能顯著提升 SQL 編寫效率與可讀性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved