类型 | 字节 | 格式 | 应用场景 | 是否支持设置系统默认值 | 范围 |
---|---|---|---|---|---|
date | 3 | YYYY-MM-DD | 精确到天 | 不支持 | 1000-01-01/9999-12-31 |
time | 3 | HH : MM : SS | 每天的时间 | 不支持 | ‘-838:59:59’/‘838:59:59’ |
year | 1 | YYYY | 只要年份 | 不支持 | 1901/2155 |
datetime | 8 | YYYY- MM -DD HH : MM :SS | 精确到秒 | MySQL 5.6.5支持 | 1000-01-01 00:00:00/9999-12-31 23:59:59 |
timestamp | 4 | YYYYMMDD HHMMSS | 精确到秒或毫秒,时间戳,系统用于不同时区 | 支持 | 1970-01-01 00:00:00/2038 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 |
默认为创建时间(修改行后时间不会变化)
ALTER TABLE tab_name MODIFY COLUMN create_time TIMESTAMP
NOT NULL
DEFAULT CURRENT_TIMESTAMP
修改行自动更新时间
ALTER TABLE tab_name MODIFY COLUMN update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP
MySQL 为日期增加一个时间间隔:date_add()
set @dt = now();
select date_add(@dt, interval 1 day); -- add 1 day
select date_add(@dt, interval 1 hour); -- add 1 hour
select date_add(@dt, interval 1 minute); -- ...
select date_add(@dt, interval 1 second);
select date_add(@dt, interval 1 microsecond);
select date_add(@dt, interval 1 week);
select date_add(@dt, interval 1 month);
select date_add(@dt, interval 1 quarter);
select date_add(@dt, interval 1 year);
select date_add(@dt, interval -1 day); -- sub 1 day
MySQL 为日期减去一个时间间隔:date_sub(),和 date_add() 类似
mysql> select date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second);
+----------------------------------------------------------------+
| date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second) |
+----------------------------------------------------------------+
| 1997-12-30 22:58:59 |
+----------------------------------------------------------------+
两个日期相减 date1 - date2,返回天数。
select datediff('2008-08-08', '2008-08-01'); -- 7
select datediff('2008-08-01', '2008-08-08'); -- -7
两个日期相减 time1 - time2,返回 time 差值。
select timediff('2008-08-08 08:08:08', '2008-08-08 00:00:00'); -- 08:08:08
select timediff('08:08:08', '00:00:00'); -- 08:08:08
MySQL 时间戳(timestamp)转换、增、减函数:
select timestamp('2008-08-08'); -- 2008-08-08 00:00:00
按格式加
select timestamp('2008-08-08 08:00:00', '01:01:01'); -- 2008-08-08 09:01:01
按格式加
select timestamp('2008-08-08 08:00:00', '10 01:01:01'); -- 2008-08-18 09:01:01
加一天
select timestampadd(day, 1, '2008-08-08 08:00:00'); -- 2008-08-09 08:00:00
select date_add('2008-08-08 08:00:00', interval 1 day); -- 2008-08-09 08:00:00
timestampdiff(option,time1,time2)-- time2-time1
select timestampdiff(year,'2002-05-01','2001-01-01'); -- -1
select timestampdiff(day ,'2002-05-01','2001-01-01'); -- -485
select timestampdiff(hour,'2008-08-08 12:00:00','2008-08-08 00:00:00'); -- -12
select datediff('2008-08-08 12:00:00', '2008-08-01 00:00:00'); -- 7
时间戳计算时间差 > date计算时间差
convert_tz(dt,from_tz,to_tz)
select convert_tz('2020-03-20 22:15:32', '+00:00', '+08:00'); -- 2020-03-21 06:15:32
https://www.cnblogs.com/ggjucheng/p/3352280.html