时间日期
使用图形化数据库软件,一般都要进行配置时区,全世界不同的地方的显示时间是不一样的,有些软件没有给我们默认配置时区,我们需要进行手动的配置,一般选择亚洲上海即可
日期时间数据类型
对于日期时间的数据类型,mysql
提供了以下的时间日期类型:
日期时间类型 | 占用空间 | 日期格式 | 最小值 | 最大值 | 零值表示 |
---|---|---|---|---|---|
DATETIME | 8bytes | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 | 0000-00-00 00:00:00 |
TIMESTAMP | 4bytes | YYYY-MM-DD HH:MM:SS | 1970-01-01 08:00:01 | 2038-01-19 03:14:07 | 00000000000000 |
DATE | 4bytes | YYYY-MM-DD | 1000-01-01 | 9999-12-31 | 0000-00-00 |
TIME | 3bytes | HH:MM:SS | -838:59:59 | 838:59:59 | 00:00:00 |
YEAR | 1bytes | YYYY | 1901 | 2155 | 0000 |
日期类型也可以存储为字符串的类型,但是如果后期要进行计算就不好计算了,时间日期类型有专门的计算函数可以提供计算使用
选择时间日期类型,我们需要考虑数据类型的大小和格式,够用就行
TIMESTAMP
表示时间戳类型
设置更新时间,默认的时间是当前的时间戳:(显示的还年月日时分秒的时间格式)
ALTER TABLE stu ADD updated_at timestamp DEFAULT CURRENT_TIMESTAMP;
使用时间戳类型需要注意时间日期的设置范围,不要超出,不然会报错
上面设置的更新时间,修改当前数据的其他字段的内容,更新时间字段的数据不会发生改变,对于更新时间这个字段来说,这是不合理的,我们需要当该数据有任何的字段内容发生变化后,就要触发更新时间的更新,需要做以下的修改:(当有内容更新的时候,设置更新时间也为当前时间)
ALTER TABLE stu ADD updated_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
其中:
DEFAULT CURRENT_TIMESTAMP
表示默认为当前时间;NOT NULL
表示不能为空;ON UPDATE CURRENT_TIMESTAMP
表示在修改的时候,自动以当前的时间更新
Mysql
保存日期格式使用YYYY-MM-DD HH:MM:SS
的ISO 8601
标准,向数据表储存日期与时间必须使用ISO
格式
总结,在选择时间日期数据类型的时候,如果要牵扯到计算(计算考勤等),我们就选择上面的时间日期类型,如果只是单纯的记实时间,只有用于展示的,我们可以选择int
类型或者字符串类型
时间日期数据类型的使用
添加一个字段,其类型为时间日期的数据类型:
ALTER TABLE stu ADD birthday datetime default null;
在数据表
stu
中添加一个brithday
字段,该字段类型为datetime
,字段的默认值允许为空插入一条数据:
UPDATE stu set birthday = "2000-02-13 03:22:10" WHERE id = 1;
格式化输出
我们可以通过时间日期的格式化输出获取任何我们想要的时间数据,我们需要使用DATE_FORMAT
来格式化输出时间日期
格式化输出的参数:
格式 | 描述 |
---|---|
%a | 缩写星期名 |
%b | 缩写月名 |
%c | 月,数值 |
%D | 带有英文前缀的月中的天 |
%d | 月的天,数值(00-31) |
%e | 月的天,数值(0-31) |
%f | 微秒 |
%H | 小时 (00-23) |
%h | 小时 (01-12) |
%I | 小时 (01-12) |
%i | 分钟,数值(00-59) |
%j | 年的天 (001-366) |
%k | 小时 (0-23) |
%l | 小时 (1-12) |
%M | 月名 |
%m | 月,数值(00-12) |
%p | AM 或 PM |
%r | 时间,12-小时(hh:mm:ss AM 或 PM) |
%S | 秒(00-59) |
%s | 秒(00-59) |
%T | 时间, 24-小时 (hh:mm:ss) |
%U | 周 (00-53) 星期日是一周的第一天 |
%u | 周 (00-53) 星期一是一周的第一天 |
%V | 周 (01-53) 星期日是一周的第一天,与 %X 使用 |
%v | 周 (01-53) 星期一是一周的第一天,与 %x 使用 |
%W | 星期名 |
%w | 周的天 (0=星期日, 6=星期六) |
%X | 年,其中的星期日是周的第一天,4 位,与 %V 使用 |
%x | 年,其中的星期一是周的第一天,4 位,与 %v 使用 |
%Y | 年,4 位 |
%y | 年,2 位 |
格式化输出的使用:SELECT DATE_FORMAT(birthday, '%Y年%m月%d日') from stu;
结果显示:
2000年02月13日
Date_format
格式化日期与时间显示,还有一种时间日期的格式化方法:time_format
,只能格式化输出时间:
SELECT TIME_FORMAT(birthday, '%h:%i:%s') from stu;