| 型別 | 儲存空間 | 格式 | 範圍 |
|---|---|---|---|
| DATETIME | 8 bytes | YYYY-MM-DD HH:MM:SS | 1000-01-01 ~ 9999-12-31 |
| TIMESTAMP | 4 bytes | YYYY-MM-DD HH:MM:SS | 1970-01-01 ~ 2038 |
| DATE | 3 bytes | YYYY-MM-DD | 1000-01-01 ~ 9999-12-31 |
| YEAR | 1 byte | YYYY | 1901 ~ 2155 |
| TIME | 3 bytes | HH:MM:SS | -838:59:59 ~ 838:59:59 (支援負值,用於時間差) |
建議:一般情況優先使用 DATETIME,範圍大且不受時區影響。TIMESTAMP 會自動填充/更新為當前時間,適合記錄建立/修改時間戳。
NOW()、SYSDATE():NOW() 在語句開始時固定值,SYSDATE() 執行時動態取值。CURDATE()、CURTIME():分別取得日期、時間。UTC_TIMESTAMP()、UTC_DATE()、UTC_TIME():UTC 時間,跨時區應用必備。DATE_ADD('1997-12-31 23:59:59', INTERVAL 1 SECOND) -- 1998-01-01 00:00:00
DATE_ADD('1998-01-01', INTERVAL -1 DAY) -- 1997-12-31
DATE_ADD('1998-01-01', INTERVAL '1 1:1:1' DAY_SECOND) -- 1998-01-02 01:01:01
支援單位:MICROSECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR 及複合單位(DAY_HOUR、HOUR_MINUTE 等)。
DATEDIFF('2008-08-08', '2008-08-01') -- 7 (天數差)
TIMEDIFF('08:08:08', '00:00:00') -- 08:08:08 (時間差)
功能更強大,支援指定單位(YEAR、MONTH、DAY、HOUR 等)的加減與差值計算。
常用格式符:%Y 四位年、%m 月(00-12)、%d 日(00-31)、%H 時(00-23)、%i 分、%s 秒、%W 星期名稱、%M 月份名稱。
DATE_FORMAT('2008-08-08 22:23:00', '%Y%m%d%H%i%s') -- 20080808222301
將任意字串依格式解析為日期:
STR_TO_DATE('08/09/2008', '%m/%d/%Y') -- 2008-08-09
STR_TO_DATE('08.09.2008 08:09:30', '%m.%d.%Y %h:%i:%s')
UNIX_TIMESTAMP() -- 當前時間戳
UNIX_TIMESTAMP('2008-08-08') -- 指定日期轉時間戳
FROM_UNIXTIME(1218290027) -- 時間戳轉日期時間
FROM_UNIXTIME(1218290027, '%Y %D %M %h:%i:%s %x')
CONVERT_TZ('2008-08-08 12:00:00', '+08:00', '+00:00') -- 2008-08-08 04:00:00
-- 或用 DATE_ADD/TIMESTAMPADD 手動加減時差
EXTRACT(unit FROM datetime):彈性擷取日期任意部分(含複合單位)。LAST_DAY(date):取得該月最後一天,配合 DAY() 可算出月份天數。MAKEDATE(year, dayofyear)、MAKETIME(hour, minute, second):組合日期/時間。GET_FORMAT(type, 'locale'):取得各地區預設格式字串。