从MariaDB中的时间值获取小时的4个函数

发布于

以下是 4 个函数,使您能够从 MariaDB 中的时间值返回小时。

函数HOUR()

该函数返回给定表达式的小时。它接受一个参数,即您要从中提取小时的时间。HOUR()TIME``DATETIME

例:

SELECT HOUR('03:45:30');

结果:

+——————+ | HOUR(‘03:45:30’) | +——————+ | 3 | +——————+

对于时间值,它将小时作为范围中的数字返回。但是,值的范围可以大得多,因此,返回的值可以远大于。具体来说,值可以在范围内。0``23``TIME``23``TIME``'-838:59:59.999999'``'838:59:59.999999'

下面是一个具有较大小时部分的示例:

SELECT HOUR('838:45:30');

结果:

+——————-+ | HOUR(‘838:45:30’) | +——————-+ | 838 | +——————-+

如果时间超出值的接受范围,则返回值带有警告。TIME``838

TIME值也可以为负数。在这种情况下,返回一个正值。HOUR()

函数EXTRACT()

该函数允许您从日期/时间值中提取指定的单位。因此,您可以使用它从时间值中提取小时(以及其他单位)。EXTRACT()

例:

SELECT EXTRACT(HOUR FROM '10:47:01');

结果:

+——————————-+ | EXTRACT(HOUR FROM ‘10:47:01’) | +——————————-+ | 10 | +——————————-+

函数TIME_FORMAT()

该函数允许您根据格式字符串设置时间值的格式。格式字符串指定应如何设置时间格式。TIME_FORMAT()

因此,您可以使用此函数从时间返回小时(以及分钟和秒)。有多种返回小时的选项。

下面是一个以各种形式返回小时的示例:

SELECT 
    TIME_FORMAT('18:45:30', '%H') AS '%H',
    TIME_FORMAT('18:45:30', '%h') AS '%h',
    TIME_FORMAT('18:45:30', '%I') AS '%I',
    TIME_FORMAT('18:45:30', '%k') AS '%k',
    TIME_FORMAT('18:45:30', '%l') AS '%l';

结果:

+——+——+——+——+——+ | %H | %h | %I | %k | %l | +——+——+——+——+——+ | 18 | 06 | 06 | 18 | 6 | +——+——+——+——+——+

以下是每个格式说明符的说明:

格式说明符 描述
%H 小时,00-23 之间有 2 位数字。
%h 小时,01-12 之间有 2 位数字。
%I 小时,01-12 之间有 2 位数字。
%k 小时,0-23 之间的 1 位数字。
%l 小时,1-12 之间的 1 位数字。

该函数接受可与函数一起使用的格式字符串的子集。请参阅MariaDB格式字符串 获取可用于的格式字符串/说明符的完整列表。该函数仅接受小时、分钟和秒的格式说明符。任何其他格式说明符都会导致返回。TIME_FORMAT()``DATE_FORMAT()``DATE_FORMAT()``TIME_FORMAT()``null``0

函数DATE_FORMAT()

该函数允许您根据格式字符串格式化日期或日期时间值。格式字符串指定应如何设置日期/时间的格式。DATE_FORMAT()

因此,我们可以使用与上一个示例中的函数相同的格式说明符。但是,不接受 avalue,因此我们需要传递 avalue。TIME_FORMAT()``DATE_FORMAT()``TIME``DATETIME

SELECT 
    DATE_FORMAT('2023-01-01 18:45:30', '%H') AS '%H',
    DATE_FORMAT('2023-01-01 18:45:30', '%h') AS '%h',
    DATE_FORMAT('2023-01-01 18:45:30', '%I') AS '%I',
    DATE_FORMAT('2023-01-01 18:45:30', '%k') AS '%k',
    DATE_FORMAT('2023-01-01 18:45:30', '%l') AS '%l';

结果:

+——+——+——+——+——+ | %H | %h | %I | %k | %l | +——+——+——+——+——+ | 18 | 06 | 06 | 18 | 6 | +——+——+——+——+——+

仅传递 avalue 并不能完全使用此函数来削减它:TIME

SELECT 
    DATE_FORMAT('18:45:30', '%H') AS '%H',
    DATE_FORMAT('18:45:30', '%h') AS '%h',
    DATE_FORMAT('18:45:30', '%I') AS '%I',
    DATE_FORMAT('18:45:30', '%k') AS '%k',
    DATE_FORMAT('18:45:30', '%l') AS '%l';

结果:

+——+——+——+——+——+ | %H | %h | %I | %k | %l | +——+——+——+——+——+ | NULL | NULL | NULL | NULL | NULL | +——+——+——+——+——+ 1 row in set, 5 warnings (0.000 sec)

显示警告:

SHOW WARNINGS;

结果:

+———+——+————————————–+ | Level | Code | Message | +———+——+————————————–+ | Warning | 1292 | Incorrect datetime value: ‘18:45:30’ | | Warning | 1292 | Incorrect datetime value: ‘18:45:30’ | | Warning | 1292 | Incorrect datetime value: ‘18:45:30’ | | Warning | 1292 | Incorrect datetime value: ‘18:45:30’ | | Warning | 1292 | Incorrect datetime value: ‘18:45:30’ | +———+——+————————————–+