轻松上手,快乐学习!

MySQL 教程

MySQL 首页MySQL 介绍MySQL 安装MySQL 实例库下载MySQL 实例库导入MySQL SELECTMySQL DISTINCTMySQL ORDER BYMySQL WHEREMySQL ANDMySQL ORMySQL INMySQL BETWEENMySQL LIKEMySQL LIMITMySQL IS NULLMySQL 别名MySQL JOINSMySQL INNER JOINMySQL LEFT JOINMySQL RIGHT JOINMySQL CROSS JOINMySQL SELF JOINMySQL GROUP BYMySQL HAVINGMySQL ROLLUPMySQL 子查询MySQL 派生表MySQL EXISTSMySQL CTEMySQL 递归 CTEMySQL UNIONMySQL INTERSECTMySQL MINUSMySQL INSERTMySQL INSERT INTO SELECTMySQL INSERT IGNOREMySQL UPDATEMySQL UPDATE JOINMySQL DELETEMySQL ON DELETE CASCADEMySQL DELETE JOINMySQL REPLACEMySQL PREPAREMySQL 事务MySQL 表锁定MySQL USEMySQL 数据库管理MySQL CREATE DATABASEMySQL DROP DATABASEMySQL 存储引擎MySQL CREATE TABLEMySQL 序列MySQL ALTER TABLEMySQL RENAME TABLEMySQL DROP COLUMNMySQL ADD COLUMNMySQL DROP TABLEMySQL 临时表MySQL TRUNCATE TABLEMySQL 数据类型MySQL NOT NULLMySQL Primary KeyMySQL Foreign KeyMySQL UNIQUEMySQL CHECKMySQL 字符集MySQL 排序规则MySQL 导入 CSVMySQL 导出 CSVMySQL 自然排序MySQL 基础MySQL NOT INMySQL Storage Engines

MySQL 存储过程

MySQL 存储过程介绍MySQL 存储过程实例MySQL 存储过程变量MySQL 存储过程参数MySQL 存储过程返回多值MySQL IF 语句MySQL CASE 语句MySQL IF CASE 选择MySQL 存储过程循环MySQL 存储过程游标MySQL 存储过程列表MySQL 存储过程异常处理MySQL SIGNAL 和 RESIGNALMySQL 存储函数MySql 自定义存储

MySQL 视图

MySQL 视图教程SQL 视图介绍MySQL 视图介绍MySQL 创建视图MySQL 可更新视图WITH CHECK OPTIONLOCAL&CASCADEDMySQL 视图管理

MySQL 触发器

MySQL 触发器SQL 触发器MySQL 触发器介绍MySQL 触发器的创建MySQL 创建多个触发器MySQL 触发器管理MySQL 计划事件MySQL事件修改

MySQL 索引

MySQL 索引MySQL 索引创建MySQL 索引删除MySQL 显示索引MySQL 唯一索引MySQL 前缀索引MySQL 隐形索引MySQL 降序索引MySQL 复合索引MySQL 聚集索引MySQL 索引基数MySQL USE INDEXMySQL 强制索引

MySQL 管理

MySQL 管理MySQL访问控制系统MySQL 用户创建MySQL 用户密码MySQL 权限授予MySQL 权限撤销MySQL 角色MySQL 删除用户MySQL 表维护mysqldump 备份工具MySQL 数据库列表MySQL 表列表MySQL 表字段列表MySQL 用户列表MySQL 进程列表MySQL 列生成MySQL 表自连接MySQL 恢复

MySQL 全文搜索

MySQL 全文搜索MySQL 全文搜索介绍FULLTEXT索引MySQL 自然语言全文搜索MySQL 布尔全文搜索MySQL查询扩展MySQL ngram

MySQL 高级

MySQL 函数MySQL 窗口函数

MySQL 技巧

MySQL 查找重复数据MySQL 删除重复数据MySQL UUIDMySQL 表的复制MySQL 复制库MySQL 变量MySQL SELECT INTO 变量MySQL 表的存储引擎MySQL 使用正则查询MySQL 添加序号MySQL 随机查询MySQL 查询第 N 高记录MySQL 重置自增值MySQL VS MariaDBMySQL 间隔值MySQL 获取当天日期MySQL NULL 映射MySQL 注释理解MySQL EXPLAINMySQL 技巧介绍MySQL COUNTMySQL 数据分层MySQL 两表比较Mysql Like 优化

MySQL 窗口函数

MySQL CUME_DIST() 函数MySQL DENSE_RANK() 函数MySQL FIRST_VALUE 函数MySQL LAG() 函数MySQL LAST_VALUE() 函数MySQL LEAD 函数MySQL NTH_VALUE 函数MySQL NTILE 函数MySQL PERCENT_RANK 函数MySQL RANK 函数MySQL ROW_NUMBER 函数

MySQL 应用

MySQL应用程序编程接口PHP MySQL教程PHP 数据库连接Python 持久化实现

MySQL 优化

mysqld 内存持续变高求字符串交集


MySQL TIME 数据类型


简介:在本教程中,我们将向您介绍MySQL TIME数据类型,并向您展示有用的时间函数以有效地处理时间数据。

MySQL TIME数据类型简介

MySQL使用'HH:MM:SS'格式查询并显示表示一天中24小时内的时间的时间值。为了表示两个事件之间的时间间隔,MySQL使用的'HHH:MM:SS'格式大于24小时。 要定义TIME 列,请使用以下语法:
column_name TIME;
例如,下面的片段定义了一个名为列start_atTIME数据类型。
start_at TIME;
TIME取值范围为-838:59:59838:59:59。此外,一个TIME值可以具有小数秒部分,精确到微秒(6位)。要定义其数据类型TIME具有小数秒精度部分的列,请使用以下语法:
column_name TIME(N);
N是一个整数,表示小数部分,最多6位数。 以下代码段定义了一个TIME数据类型包含3位小数秒的列。
begin_at TIME(3);
一个TIME值需要3个字节用于存储。如果TIME值包括小数秒精度,则将根据小数秒精度的位数采用额外的字节。下表说明了小数秒精度所需的存储空间。
分数秒精度 存储(BYTES)
0 0
1,2 1
3,4 2
5,6 3
例如,TIMETIME(0)占用3个字节。TIME(1)TIME(2)占用4个字节(3 + 1); TIME(3)TIME(6)取5和6个字节。

MySQL TIME数据类型示例

让我们看一下在TIME表中使用数据类型的示例。 首先,创建一个新表命名为tests 一个由四列:idnamestart_at,和end_atstart_atend_at列的数据类型是TIME
CREATE TABLE tests (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255) NOT NULL,
    start_at TIME,
    end_at TIME
);
其次,在tests表中插入一行
INSERT INTO tests(name,start_at,end_at)
VALUES('Test 1', '08:00:00','10:00:00');
第三,从tests表中查询数据
SELECT 
    name, start_at, end_at
FROM
    tests;
+--------+----------+----------+
| name   | start_at | end_at   |
+--------+----------+----------+
| Test 1 | 08:00:00 | 10:00:00 |
+--------+----------+----------+
1 row in set (0.00 sec)
注意:我们在INSERT语句中使用'HH:MM:SS'文字时间值。让我们检查一下MySQL可以识别的所有有效时间文字。

MySQL TIME文字

除了'HH:MM:SS'前面提到的格式之外,MySQL还识别各种时间格式。 MySQL允许您使用'HHMMSS'不带分隔符(:) 的格式来表示时间值。例如,'08:30:00''10:15:00'可以改写为'083000''101500'
INSERT INTO tests(name,start_at,end_at)
VALUES('Test 2','083000','101500');
mysql> select * from tests;
+----+--------+----------+----------+
| id | name   | start_at | end_at   |
+----+--------+----------+----------+
|  1 | Test 1 | 08:00:00 | 10:00:00 |
|  2 | Test 2 | 08:30:00 | 10:15:00 |
+----+--------+----------+----------+
2 rows in set (0.00 sec)
但是,108000它不是有效的时间值,因为80它不代表正确的分钟。在这种情况下,如果您尝试在表中插入无效的时间值,MySQL将引发错误。
INSERT INTO tests(name,start_at,end_at)
VALUES('Test invalid','083000','108000');
执行上述语句后,MySQL发出以下错误消息。
ERROR 1292 (22007): Incorrect time value: '108000' for column 'end_at' at row 1
除了字符串格式之外,MySQL还接受HHMMSS表示时间值的数字。你也可以用SSMMSS。例如,'082000'您可以使用082000以下方法,而不是使用它:
INSERT INTO tests(name,start_at,end_at)
VALUES('Test 3',082000,102000);
mysql> select * from tests;
+----+--------+----------+----------+
| id | name   | start_at | end_at   |
+----+--------+----------+----------+
|  1 | Test 1 | 08:00:00 | 10:00:00 |
|  2 | Test 2 | 08:30:00 | 10:15:00 |
|  3 | Test 3 | 08:20:00 | 10:20:00 |
+----+--------+----------+----------+
3 rows in set (0.00 sec)
在时间间隔,则可以使用'D HH:MM:SS'其中的格式D表示天从0到34,一种更为灵活的语法是一个范围'HH:MM''D HH:MM''D HH',或'SS' 如果使用分隔符,则可以使用1位数表示小时,分钟或秒。例如,使用9:5:0可以代替'09:05:00'
INSERT INTO tests(name,start_at,end_at)
VALUES('Test 4','9:5:0',100500);
mysql> select * from tests;
+----+--------+----------+----------+
| id | name   | start_at | end_at   |
+----+--------+----------+----------+
|  1 | Test 1 | 08:00:00 | 10:00:00 |
|  2 | Test 2 | 08:30:00 | 10:15:00 |
|  3 | Test 3 | 08:20:00 | 10:20:00 |
|  4 | Test 4 | 09:05:00 | 10:05:00 |
+----+--------+----------+----------+
4 rows in set (0.00 sec)

有用的MySQL TIME函数

MySQL为操作TIME数据提供了几个有用的时间函数。

获取当前时间

要获取数据库服务器的当前时间,请使用CURRENT_TIME函数。CURRENT_TIME函数将当前时间值作为字符串('HH:MM:SS')或数值(HHMMSS)返回,具体取决于使用该函数的上下文。 以下语句说明了CURRENT_TIME字符串和数字上下文中的函数:
SELECT 
    CURRENT_TIME() AS string_now,
    CURRENT_TIME() + 0 AS numeric_now;
+------------+-------------+
| string_now | numeric_now |
+------------+-------------+
| 15:56:11   |      155611 |
+------------+-------------+
1 row in set (0.00 sec)

从TIME值添加和减去时间

要将TIME值添加到另一个TIME值,请使用该ADDTIME函数。要从TIME另一个TIME值中减去一个值,请使用 SUBTIME函数。 以下语句添加和减去当前时间2小时30分钟。
SELECT 
    CURRENT_TIME(),
    ADDTIME(CURRENT_TIME(), 023000), 
    SUBTIME(CURRENT_TIME(), 023000);
+----------------+---------------------------------+---------------------------------+
| CURRENT_TIME() | ADDTIME(CURRENT_TIME(), 023000) | SUBTIME(CURRENT_TIME(), 023000) |
+----------------+---------------------------------+---------------------------------+
| 15:57:18       | 18:27:18                        | 13:27:18                        |
+----------------+---------------------------------+---------------------------------+
1 row in set (0.00 sec)
此外,您可以使用TIMEDIFF()函数来获取两个TIME值之间的差值。
SELECT 
    TIMEDIFF(end_at, start_at)
FROM
    tests;
+----------------------------+
| TIMEDIFF(end_at, start_at) |
+----------------------------+
| 02:00:00                   |
| 01:45:00                   |
| 02:00:00                   |
| 01:00:00                   |
+----------------------------+
4 rows in set (0.00 sec)

MySQL TIME 格式化

虽然MySQL 'HH:MM:SS'在检索和显示TIME 值时使用,但可以使用TIME_FORMAT函数来格式化TIME值  。 TIME_FORMAT函数与DATE_FORMAT函数类似,只是TIME_FORMAT函数仅用于格式化TIME值。 请参阅以下示例。
SELECT 
    name,
    TIME_FORMAT(start_at, '%h:%i %p') start_at,
    TIME_FORMAT(end_at, '%h:%i %p') end_at
FROM
    tests;
+--------+----------+----------+
| name   | start_at | end_at   |
+--------+----------+----------+
| Test 1 | 08:00 AM | 10:00 AM |
| Test 2 | 08:30 AM | 10:15 AM |
| Test 3 | 08:20 AM | 10:20 AM |
| Test 4 | 09:05 AM | 10:05 AM |
+--------+----------+----------+
4 rows in set (0.00 sec)
在上面的时间格式字符串中:
  •  %h 表示从0到12的两位数小时。
  •  %i 表示从0到60的两位数分钟。
  •  %p AM或PM。

从TIME值中提取小时,分钟和秒

要从TIME中提取小时,分钟和秒值,使用HOURMINUTESECOND功能如下:
SELECT 
    start_at,
    HOUR(start_at) as h,
    MINUTE(start_at) as m,
    SECOND(start_at) as s
FROM
    tests;
+----------+------+------+------+
| start_at | h    | m    | s    |
+----------+------+------+------+
| 08:00:00 |    8 |    0 |    0 |
| 08:30:00 |    8 |   30 |    0 |
| 08:20:00 |    8 |   20 |    0 |
| 09:05:00 |    9 |    5 |    0 |
+----------+------+------+------+
4 rows in set (0.00 sec)

获取UTC时间值

要获得UTC时间,请使用以下UTC_TIME函数:
SELECT 
   CURRENT_TIME(), 
   UTC_TIME();
+----------------+------------+
| CURRENT_TIME() | UTC_TIME() |
+----------------+------------+
| 16:04:06       | 08:04:06   |
+----------------+------------+
1 row in set (0.00 sec)
在本教程中,我们已经介绍了很多关于MySQL TIME数据类型和一些常用的操作TIME值的时间函数。