MySQL中有多种表示日期的数据类型,主要有:DATETIME、DATE、TIMESTAMP、TIME和YEAR。当只记录年信息的时候,可以只使用YEAR类型,而没有必要使用DATE。每一个类型都有合法的取值范围,当指定不合法的值时系统将插入0。
下面列出了MySQL中的日期类型:
日期与时间类型
类型名称 | 日期格式 | 日期范围 | 存储需求 |
TEAR | YYYY | 1901~2155 | 1字节 |
TIME | HH:MM:SS | -838:59:59~838:59:59 | 3字节 |
DATE | YYYY-MM-DD | 1000-01-01~9999-12-3 | 3字节 |
DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00~9999-12-31 23:59:59 | 8字节 |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:01 UTC~2038-01-19 03:14:07 UTC | 4字节 |
1、 YEAR类型字段可以插入数值类型或字符串类型
insert into tmp (year) values (2017), ('2017');
2、TIME的取值范围为-838:59:59~838:59:59,小时部分如此大是因为TIME不仅可以用于表示一天的时间(小于24小时),还可以表示某两个事件之间的时间间隔。
3、TIME的格式可以是:‘D HH:MM:SS’、’HH:MM:SS’、’HH:MM’、’D HH:MM’、’D HH’或‘SS’。D表示日可以取0-34之间的值,在插入数据库时,D被转换为小时保存。TIME也可以是‘HHMMSS’格式的字符串或数值,但必须是有意义的时间。若不合法的(如‘119912’,分钟数不合法)。
4、可以使用系统日期函数向TIME字段插入值。(CURRENT_TIME、NOW())
5、关于DATE类型,以‘YY-MM-DD’或者‘YYMMDD’字符串格式表示的日期。可以使用两位的年值,MySQL会将‘00-69’范围的年值转换为‘2000-2069’;‘70-99’范围的年值转换为‘1970-1999’;同样,也可以向表中插入系统当前日期。(CURRENT_DATE()、NOW())
6、DATETIME类型,形如‘YYYY-MM-DD HH:MM:SS’或‘YYYYMMDDHHMMSS’具体规则和上面几种类型相似。也可以通过NEW()插入当前系统日期。
7、TIMESTAMP的显示格式与DATETIME相同,显示宽度固定在19个字符,日期格式为YYYY-MM-DD HH:MM:SS,在存储时需要4个字节,但是TIMESTAME列的取值范围小于DATETIME的取值范围,为’1970-01-01 00:00:01’ UTC~’2038-01-19 03:14:07’ UTC,UTC为世界标准时间,因此在插入数据时,要保证在合法的取值范围内。
MySQL中的日期和时间函数
1、获取当前时间的函数和获取当前日期的函数
CURDATE()和CURRENT_DATE()作用相同,将当前日期按照‘YYYY-MM-DD’或YYYYMMDD格式的值返回,具体格式根据函数所在语境而定。
2、获取当前日期和时间的函数
CURRENT_TIMESTAMP()、LOCALTIME()、NOW()、SYSDATE(),均返回当前时间和日期。
3、UNIX时间戳函数
UNIX_TIMESTAMP(date),返回一个Unix时间戳(从1970-01-01 00:00:00起始至date时间的秒数),date可以是DATE字符串、DATETIME字符串TIMESTAMP或YYMMDD/YYYYMMDD格式的数字,若为空则返回一个到当前时间的总秒数。
使用FROM_UNIXTIME(date)函数把UNIX时间戳转换为普通格式的时间。