MySQL TIME时间类型的用法(附带实例)
MySQL 中的 TIME 类型用在只需要时间信息时,在存储时需要 3 字节,格式为 “HH:MM:SS”。其中,HH表示小时,MM 表示分钟,SS 表示秒。
TIME类型的取值范围为 −838:59:59~838:59:59,小时部分取值范围如此大的原因是,TIME 类型不仅可以表示一天的时间(必须小于 24 小时),还可以表示某个事件过去的时间或两个事件之间的时间间隔(可以大于 24 小时,甚至可以为负)。
可以使用以下两种格式指定 TIME 值:
1) “D HH:MM:SS” 格式的字符串。可以使用下面任何一种“非严格”的语法:
2) “HHMMSS”格式的、没有间隔符的字符串或者 HHMMSS 格式的数值,假定是有意义的时间。例如,“101112”被理解为“10:11:12”,而“109712”是不合法的(它有一个没有意义的分钟部分),存储时将变为 00:00:00。
为 TIME 列分配简写值时应注意,如果 TIME 值中没有冒号,那么 MySQL 在解释值时,假定最右边的两位表示秒(MySQL 解释 TIME 值为过去的时间而不是当天的时间)。
例如,读者可能认为“1112”和 1112 都表示 11:12:00(11 点 12 分),但 MySQL 将它们解释为 00:11:12(11 分 12 秒)。同样地,“12”和 12 被解释为 00:00:12。相反,如果 TIME 值中使用冒号,则肯定被看作当天的时间,也就是说,“11:12”表示 11:12:00,而不是 00:11:12。
【实例 1】创建数据表 tmp4,定义数据类型为 TIME 的字段 t,向表中插入值“10:05:05”、“23:23”、“2 10:10”、“3 02”和“10”。
1) 创建表 tmp4:
2) 向表中插入数据:
3) 查看插入结果:
【实例 2】向表 tmp4 中插入值“101112”、111213、“0” 和 107010。
1) 删除表中的数据:
2) 向表中插入数据:
3) 再向表中插入数据:
使用 “SHOW WARNINGS;” 语句查看错误信息,结果如下:
4) 查看插入结果:
【实例 3】也可以使用系统日期函数向 TIME 字段列插入值。例如向表 tmp4 中插入系统当前时间。
1) 删除表中的数据:
2) 向表中插入数据:
3) 查看插入结果:
TIME类型的取值范围为 −838:59:59~838:59:59,小时部分取值范围如此大的原因是,TIME 类型不仅可以表示一天的时间(必须小于 24 小时),还可以表示某个事件过去的时间或两个事件之间的时间间隔(可以大于 24 小时,甚至可以为负)。
可以使用以下两种格式指定 TIME 值:
1) “D HH:MM:SS” 格式的字符串。可以使用下面任何一种“非严格”的语法:
HH:MM:SS HH:MM D HH:MM D HH SS这里的 D 表示日,可以取 0~31 的值。在插入数据库时,D 被转换为小时保存,格式为 “D*24 + HH”。
2) “HHMMSS”格式的、没有间隔符的字符串或者 HHMMSS 格式的数值,假定是有意义的时间。例如,“101112”被理解为“10:11:12”,而“109712”是不合法的(它有一个没有意义的分钟部分),存储时将变为 00:00:00。
为 TIME 列分配简写值时应注意,如果 TIME 值中没有冒号,那么 MySQL 在解释值时,假定最右边的两位表示秒(MySQL 解释 TIME 值为过去的时间而不是当天的时间)。
例如,读者可能认为“1112”和 1112 都表示 11:12:00(11 点 12 分),但 MySQL 将它们解释为 00:11:12(11 分 12 秒)。同样地,“12”和 12 被解释为 00:00:12。相反,如果 TIME 值中使用冒号,则肯定被看作当天的时间,也就是说,“11:12”表示 11:12:00,而不是 00:11:12。
【实例 1】创建数据表 tmp4,定义数据类型为 TIME 的字段 t,向表中插入值“10:05:05”、“23:23”、“2 10:10”、“3 02”和“10”。
1) 创建表 tmp4:
CREATE TABLE tmp4( t TIME );
2) 向表中插入数据:
mysql> INSERT INTO tmp4 values('10:05:05 '), ('23:23'), ('2 10:10'), ('3 02'), ('10');
3) 查看插入结果:
mysql> SELECT * FROM tmp4; +----------+ | t | +----------+ | 10:05:05 | | 23:23:00 | | 58:10:00 | | 74:00:00 | | 00:00:10 | +----------+由结果可以看到,“10:05:05” 被转换为 10:05:05;“23:23” 被转换为 23:23:00;“2 10:10” 被转换为 58:10:00,“3 02” 被转换为 74:00:00;“10” 被转换成 00:00:10。
在使用 “D HH” 格式时,小时一定要使用双位数值,如果是小于 10 的小时数,应在前面加 0。
【实例 2】向表 tmp4 中插入值“101112”、111213、“0” 和 107010。
1) 删除表中的数据:
DELETE FROM tmp4;
2) 向表中插入数据:
mysql>INSERT INTO tmp4 values('101112'),(111213),( '0');
3) 再向表中插入数据:
mysql>INSERT INTO tmp4 values ( 107010); ERROR 1292 (22007): Incorrect time value: '107010' for column 't' at row 1可以看到,在插入数据时,MySQL 给出了一个错误提示信息。
使用 “SHOW WARNINGS;” 语句查看错误信息,结果如下:
mysql> show warnings; +---------+------+------------------------------------------------------+ | Level | Code | Message | +---------+------+------------------------------------------------------+ | Error | 1292 |Incorrect time value: '107010' for column 't' at row 1| +---------+------+------------------------------------------------------+可以看到,第二次插入数据的时候,数据超出了范围,原因是 107010 的分钟部分超过了 60(分钟部分是不会超过 60 的)。
4) 查看插入结果:
mysql> SELECT * FROM tmp4; +----------+ | t | +----------+ | 10:11:12 | | 11:12:13 | | 00:00:00 | +----------+由结果可以看到,“101112” 被转换为 10:11:12;111213 被转换为 11:12:13;“0” 被转换为 00:00:00;107010 因为是不合法的值,所以不能插入。
【实例 3】也可以使用系统日期函数向 TIME 字段列插入值。例如向表 tmp4 中插入系统当前时间。
1) 删除表中的数据:
DELETE FROM tmp4;
2) 向表中插入数据:
mysql> INSERT INTO tmp4 values (CURRENT_TIME) ,(NOW());
3) 查看插入结果:
mysql> SELECT * FROM tmp4; +----------+ | t | +----------+ | 08:43:51 | | 08:43:51 | +----------+由结果可以看到,系统当前的日期已插入 TIME 类型的 t 列。因为读者输入语句的时间不确定,所以获取的值可能与这里的不同,但都是系统当前的时间值。