一、取得當前時間
| 函數 | 返回格式 | 備註 |
NOW() | YYYY-MM-DD HH:MM:SS | 同 SYSDATE()、CURRENT_TIMESTAMP |
CURRENT_DATE | YYYY-MM-DD 或 YYYYMMDD | 視上下文為字串或數字 |
CURRENT_TIME | HH:MM:SS 或 HHMMSS | 同上 |
SELECT NOW(); -- '1997-12-15 23:50:26'
SELECT NOW() + 0; -- 19971215235026
二、日期時間格式化
DATE_FORMAT(date, format) -- 日期時間格式化
TIME_FORMAT(time, format) -- 僅時間部分格式化
常用格式符
| 符號 | 含義 |
| %Y | 四位年份 |
| %m | 月份 (01-12) |
| %d | 日期 (00-31) |
| %H | 小時 24制 (00-23) |
| %i | 分鐘 (00-59) |
| %s | 秒 (00-59) |
| %W | 星期名稱 |
| %M | 月份名稱 |
| %D | 帶英文後綴的日期 |
| %r | 12制時間 (hh:mm:ss AM/PM) |
| %T | 24制時間 (hh:mm:ss) |
SELECT DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
-- 'Saturday October 1997'
SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
-- '22:23:00'
三、日期部件提取
| 函數 | 說明 |
TO_DAYS(date) | 從公元 0 年起的天數 |
FROM_DAYS(N) | 天數轉日期 |
DAYOFWEEK(date) | 星期索引 (1=Sun) |
WEEKDAY(date) | 星期索引 (0=Mon) |
DAYOFMONTH(date) | 月內日期 (1-31) |
DAYOFYEAR(date) | 年內天數 (1-366) |
MONTH(date) | 月份 (1-12) |
DAYNAME(date) | 星期名稱 |
MONTHNAME(date) | 月份名稱 |
QUARTER(date) | 季度 (1-4) |
WEEK(date[,mode]) | 週數 (mode 0=Sun, 1=Mon) |
YEAR(date) | 年份 |
HOUR/MINUTE/SECOND(time) | 時/分/秒 |
四、秒數轉換
SEC_TO_TIME(seconds) -- 秒轉 'HH:MM:SS' 或 HHMMSS
TIME_TO_SEC(time) -- 時間轉總秒數
SELECT SEC_TO_TIME(2378); -- '00:39:38'
SELECT TIME_TO_SEC('22:23:00'); -- 80580
五、Unix 時間戳互轉
UNIX_TIMESTAMP([date]) -- 日期轉秒數 (從 1970-01-01)
FROM_UNIXTIME(unix_ts[,fmt]) -- 秒數轉日期字串
SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00'); -- 875996580
SELECT FROM_UNIXTIME(875996580); -- '1997-10-04 22:23:00'
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x'); -- 格式化輸出
六、實戰更新範例
在原時間基礎上加 20 分鐘
UPDATE anpai SET tttime = FROM_UNIXTIME(UNIX_TIMESTAMP(endtime) + 60*20, '%Y-%m-%d %H:%i:%s');
日期時間分離欄位整體加 8 小時(時區修正)
UPDATE gps_cell SET
GPSDate = FROM_UNIXTIME(UNIX_TIMESTAMP(CONCAT_WS(' ', GPSDate, GPSTime)) + 3600*8, '%Y-%m-%d'),
GPSTime = FROM_UNIXTIME(UNIX_TIMESTAMP(CONCAT_WS(' ', GPSDate, GPSTime)) + 3600*8, '%H:%i:%s');