Skip to content

时间日期

使用图形化数据库软件,一般都要进行配置时区,全世界不同的地方的显示时间是不一样的,有些软件没有给我们默认配置时区,我们需要进行手动的配置,一般选择亚洲上海即可

日期时间数据类型

对于日期时间的数据类型,mysql提供了以下的时间日期类型:

日期时间类型占用空间日期格式最小值最大值零值表示
DATETIME8bytesYYYY-MM-DD HH:MM:SS1000-01-01 00:00:009999-12-31 23:59:590000-00-00 00:00:00
TIMESTAMP4bytesYYYY-MM-DD HH:MM:SS1970-01-01 08:00:012038-01-19 03:14:0700000000000000
DATE4bytesYYYY-MM-DD1000-01-019999-12-310000-00-00
TIME3bytesHH:MM:SS-838:59:59838:59:5900:00:00
YEAR1bytesYYYY190121550000
  • 日期类型也可以存储为字符串的类型,但是如果后期要进行计算就不好计算了,时间日期类型有专门的计算函数可以提供计算使用

  • 选择时间日期类型,我们需要考虑数据类型的大小和格式,够用就行

  • 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:SSISO 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)
%pAM 或 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;

Released under the MIT License.