MySQL YEAR类型的用法(附带实例)
MySQL 中有多种表示日期的数据类型,主要有 DATETIME、DATE、TIMESTAMP、TIME 和 YEAR。当只记录年信息的时候,可以只使用 YEAR 类型。
YEAR 是一个单字节类型,用于表示年,在存储时只需要 1 字节。可以使用以下 3 种格式指定 YEAR 值:
1) 以 4 位字符串或者 4 位数字格式表示的 YEAR,范围为 1901~2155。输入格式为 “YYYY” 或者 YYYY。例如,输入 '2010' 或 2010,插入数据库的值均为 2010。
2) 以 2 位字符串格式表示的 YEAR,范围为 00~99。00~69 和 70~99 范围的值分别被转换为 2000~2069 和 1970~1999 范围的 YEAR 值。“0” 与 “00” 的作用相同。超过取值范围的值将被转换为 2000。
3) 以 2 位数字表示的 YEAR,范围为 1~99。1~69 和 70~99 范围的值分别被转换为 2001~2069 和 1970~1999 范围的 YEAR 值。注意:在这里 0 值将被转换为 0000,而不是 2000。
两位整数范围与两位字符串范围稍有不同。例如要插入 2000 年,读者可能会使用数字格式的 0 表示 YEAR,实际上插入数据库的值为 0000,而不是所希望的 2000。只有使用字符串格式的 '0' 或 '00',才可以被正确地解释为 2000。非法 YEAR 值将被转换为 0000。
【实例】创建数据表 tmp3,定义数据类型为 YEAR 的字段 y,向表中插入值 2010、“2010”、“2166”。
1) 创建表 tmp3,SQL 语句如下:
2) 向表中插入数据:
3) 再次向表中插入数据:
4) 上述语句执行之后,MySQL 给出了一条错误提示,使用 SHOW 查看错误信息:
5) 查看插入结果:
【实例 2】向表 tmp3 中的 y 字段插入 2 位字符串表示的 YEAR 值,分别为 “0”、“00”、“77” 和 “10”。
1) 删除表中的数据:
2) 向表中插入数据:
3) 查看插入结果:
【实例 3】向表 tmp3 中的 y 字段插入 2 位数字表示的 YEAR 值,分别为 0、78 和 11。
1) 删除表中的数据:
2) 向表中插入数据:
3) 查看插入结果:
YEAR 是一个单字节类型,用于表示年,在存储时只需要 1 字节。可以使用以下 3 种格式指定 YEAR 值:
1) 以 4 位字符串或者 4 位数字格式表示的 YEAR,范围为 1901~2155。输入格式为 “YYYY” 或者 YYYY。例如,输入 '2010' 或 2010,插入数据库的值均为 2010。
2) 以 2 位字符串格式表示的 YEAR,范围为 00~99。00~69 和 70~99 范围的值分别被转换为 2000~2069 和 1970~1999 范围的 YEAR 值。“0” 与 “00” 的作用相同。超过取值范围的值将被转换为 2000。
3) 以 2 位数字表示的 YEAR,范围为 1~99。1~69 和 70~99 范围的值分别被转换为 2001~2069 和 1970~1999 范围的 YEAR 值。注意:在这里 0 值将被转换为 0000,而不是 2000。
两位整数范围与两位字符串范围稍有不同。例如要插入 2000 年,读者可能会使用数字格式的 0 表示 YEAR,实际上插入数据库的值为 0000,而不是所希望的 2000。只有使用字符串格式的 '0' 或 '00',才可以被正确地解释为 2000。非法 YEAR 值将被转换为 0000。
【实例】创建数据表 tmp3,定义数据类型为 YEAR 的字段 y,向表中插入值 2010、“2010”、“2166”。
1) 创建表 tmp3,SQL 语句如下:
CREATE TABLE tmp3(y YEAR );
2) 向表中插入数据:
mysql> INSERT INTO tmp3 values(2010),('2010');
3) 再次向表中插入数据:
mysql> INSERT INTO tmp3 values ('2166'); ERROR 1264 (22003): Out of range value for column 'y' at row 1
4) 上述语句执行之后,MySQL 给出了一条错误提示,使用 SHOW 查看错误信息:
mysql> SHOW WARNINGS; +--------+------+---------------------------------------------+ | Level | Code | Message | +--------+------+---------------------------------------------+ | Error | 1264 | Out of range value for column 'y' at row 1; | +--------+------+---------------------------------------------+可以看到,插入的第 3 个值 2166 超过了 YEAR 类型的取值范围,此时不能正常执行插入操作。
5) 查看插入结果:
mysql> SELECT * FROM tmp3; +------+ | y | +------+ | 2010 | | 2010 | +------+由结果可以看到,当插入值为数值类型的 2010 或者字符串类型的 “2010” 时,都正确地储存到了数据库中;而当插入值为 “2166” 时,由于它超出了 YEAR 类型的取值范围,因此不能插入。
【实例 2】向表 tmp3 中的 y 字段插入 2 位字符串表示的 YEAR 值,分别为 “0”、“00”、“77” 和 “10”。
1) 删除表中的数据:
DELETE FROM tmp3;
2) 向表中插入数据:
INSERT INTO tmp3 values('0'),('00'),('77'),('10');
3) 查看插入结果:
mysql> SELECT * FROM tmp3; +------+ | y | +------+ | 2000 | | 2000 | | 1977 | | 2010 | +------+由结果可以看到,字符串 “0” 和 “00” 的作用相同,都被转换成了 2000 年;“77” 被转换为 1977;“10” 被转换为 2010。
【实例 3】向表 tmp3 中的 y 字段插入 2 位数字表示的 YEAR 值,分别为 0、78 和 11。
1) 删除表中的数据:
DELETE FROM tmp3;
2) 向表中插入数据:
INSERT INTO tmp3 values(0),(78),(11);
3) 查看插入结果:
mysql> SELECT * FROM tmp3; +------+ | y | +------+ | 0000 | | 1978 | | 2011 | +------+由结果可以看到,0 被转换为 0000,78 被转换为 1978,11 被转换为 2011。