MySQL TIME数据类型

时间:2019-11-20 08:52:11  来源:igfitidea点击:

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

MySQL TIME数据类型简介

MySQL使用'HH:MM:SS'格式查询和显示表示一天中某个时间的时间值,该时间值在24小时内。
为了表示两个事件之间的时间间隔,MySQL使用了" HHH:MM:SS"格式,该格式大于24小时。

要定义TIME列,请使用以下语法:

column_name TIME;

例如,以下代码片段定义了一个名为TIME_DATA的start_at列。

start_at TIME;

TIME值的范围是-838:59:59至838:59:59。
此外,TIME值的小数秒部分可以达到微秒的精度(6位数字)。
要定义数据类型为TIME且具有小数秒精度的列,请使用以下语法:

column_name TIME(N);

N是代表小数部分的整数,最多6位数字。

以下代码段定义了一个TIME数据类型的列,其中包括3位小数秒。

begin_at TIME(3);

TIME值需要3个字节来存储。
如果TIME值包括小数秒精度,它将基于小数秒精度的位数增加字节。
下表说明了小数秒精度所需的存储量。

Fractional Second PrecisionStorage (BYTES)
00
1, 21
3, 42
5, 63

例如,TIME和TIME(0)占用3个字节。
TIME(1)和TIME(2)占用4个字节(3 +1); TIME(3)和TIME(6)占用5和6个字节。

MySQL TIME数据类型示例

让我们看一个对表中的列使用TIME数据类型的示例。

首先,创建一个名为tests的新表,该表由四列组成:id,name,start_at和end_at。
start_at和end_at列的数据类型为TIME。

CREATE TABLE tests (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255) NOT NULL,
    start_at TIME,
    end_at TIME
);

第二,在测试表中插入一行。

INSERT INTO tests(name,start_at,end_at)
VALUES('Test 1', '08:00:00','10:00:00');

第三,从测试表中查询数据。

SELECT 
    name, start_at, end_at
FROM
    tests;

注意,我们在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');

但是,108000不是有效的时间值,因为80不能代表正确的分钟。
在这种情况下,如果您尝试向表中插入无效的时间值,MySQL将引发错误。

INSERT INTO tests(name,start_at,end_at)
VALUES('Test invalid','083000','108000');

执行上述语句后,MySQL发出以下错误消息。

Error Code: 1292. Incorrect time value: '108000' for column 'end_at' at row 1

除字符串格式外,MySQL还接受HHMMSS作为代表时间值的数字。
您也可以使用SS,MMSS。
例如,可以使用082000代替使用'082000',如下所示:

INSERT INTO tests(name,start_at,end_at)
VALUES('Test 3',082000,102000);

对于时间间隔,可以使用'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 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;

从TIME值中添加和减去时间

要将TIME值添加到另一个TIME值,请使用ADDTIME函数。
要从另一个TIME值中减去TIME值,请使用SUBTIME函数。

以下语句在当前时间前后相加或减去2小时30分钟。

SELECT 
    CURRENT_TIME(),
    ADDTIME(CURRENT_TIME(), 023000),	
    SUBTIME(CURRENT_TIME(), 023000);

此外,您可以使用TIMEDIFF()函数获得两个TIME值之间的差。

SELECT 
    TIMEDIFF(end_at, start_at)
FROM
    tests;

格式化MySQL TIME值

尽管MySQL在检索和显示TIME值时使用'HH:MM:SS',但是您可以使用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;

在上面的时间格式字符串中:

  • %h表示从0到12的两位数小时。

  • %i表示从0到60的两位数分钟。

  • %p表示上午或下午。

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

要从TIME值中提取小时,分钟和秒,请使用HOUR,MINUTE和SECOND函数,如下所示:

获取UTC时间值

要获取UTC时间,请使用UTC_TIME函数,如下所示:

SELECT 
   CURRENT_TIME(), 
   UTC_TIME();

在本教程中,我们讨论了很多有关MySQL TIME数据类型的知识以及一些用于操纵TIME值的常用时态函数。