在 MariaDB 中将小时、分钟和秒与时间值分开的 4 种方法

发布于

MariaDB 具有多个函数,使您能够从日期/时间值中提取各种日期和时间部分。如果需要,您可以使用它们将每个日期/时间组件分隔到其自己的列中。

以下是从 MariaDB 中的时间值中提取小时、分钟和秒的四种方法。作为奖励,我们还将包括微秒。

,,和函数HOUR()``MINUTE()``SECOND()``MICROSECOND()

、 和函数分别从日期或日期时间值中提取小时、分钟和秒。HOUR()MINUTE()SECOND()

如果您以更高的精度工作,则可以使用该函数返回微秒部分。MICROSECOND()

下面是使用这些函数在其自己的列中返回每个时间组件的示例:

SELECT 
    HOUR('10:45:30.123456') AS "Hours",
    MINUTE('10:45:30.123456') AS "Minutes",
    SECOND('10:45:30.123456') AS "Seconds",
    MICROSECOND('10:45:30.123456') AS "Microseconds";

结果:

+——-+———+———+————–+ | Hours | Minutes | Seconds | Microseconds | +——-+———+———+————–+ | 10 | 45 | 30 | 123456 | +——-+———+———+————–+

TIME值可以在“范围到”中。'-838:59:59.999999'``'838:59:59.999999'

TIME值也可以为负数。在这种情况下,返回值仍为正数。

下面是一个负时间值:

SELECT 
    HOUR('-10:45:30.123456') AS "Hours",
    MINUTE('-10:45:30.123456') AS "Minutes",
    SECOND('-10:45:30.123456') AS "Seconds",
    MICROSECOND('-10:45:30.123456') AS "Microseconds";

结果:

+——-+———+———+————–+ | Hours | Minutes | Seconds | Microseconds | +——-+———+———+————–+ | 10 | 45 | 30 | 123456 | +——-+———+———+————–+

函数EXTRACT()

该函数允许您从日期/时间值中提取指定的单位。因此,您可以使用它从时间值中提取小时、分钟、秒和微秒。EXTRACT()

例:

SELECT 
    EXTRACT(HOUR FROM '10:45:30.123456') AS "Hours",
    EXTRACT(MINUTE FROM '10:45:30.123456') AS "Minutes",
    EXTRACT(SECOND FROM '10:45:30.123456') AS "Seconds",
    EXTRACT(MICROSECOND FROM '10:45:30.123456') AS "Microseconds";

结果:

+——-+———+———+————–+ | Hours | Minutes | Seconds | Microseconds | +——-+———+———+————–+ | 10 | 45 | 30 | 123456 | +——-+———+———+————–+

函数TIME_FORMAT()

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

因此,您可以使用此函数分别返回各个时间部分。

例:

SELECT 
    TIME_FORMAT('10:07:30.123456', '%H') AS "Hours",
    TIME_FORMAT('10:07:30.123456', '%i') AS "Minutes",
    TIME_FORMAT('10:07:30.123456', '%s') AS "Seconds",
    TIME_FORMAT('10:07:30.123456', '%f') AS "Microseconds";

结果:

+——-+———+———+————–+ | Hours | Minutes | Seconds | Microseconds | +——-+———+———+————–+ | 10 | 07 | 30 | 123456 | +——-+———+———+————–+

也可以在同一列中单独返回所有时间分量。

下面是我的意思的一个例子:

SELECT TIME_FORMAT('10:07:30.123456', '%H %i %s %f');

结果:

+———————————————–+ | TIME_FORMAT(‘10:07:30.123456’, ‘%H %i %s %f’) | +———————————————–+ | 10 07 30 123456 | +———————————————–+

该函数接受可与函数一起使用的格式字符串的子集。TIME_FORMAT()``DATE_FORMAT()

小时部分有几种可能的格式说明符。上面使用的格式说明符返回小时,中间有两位数字。请参阅MariaDB格式字符串 获取可用于的格式字符串/说明符的完整列表。该函数仅接受小时、分钟和秒/亚秒的格式说明符。任何其他格式说明符都会导致返回。00``23``DATE_FORMAT()``TIME_FORMAT()``null``0

函数DATE_FORMAT()

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

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

SELECT 
    DATE_FORMAT('2023-01-01 10:07:30.123456', '%H') AS "Hours",
    DATE_FORMAT('2023-01-01 10:07:30.123456', '%i') AS "Minutes",
    DATE_FORMAT('2023-01-01 10:07:30.123456', '%s') AS "Seconds",
    DATE_FORMAT('2023-01-01 10:07:30.123456', '%f') AS "Microseconds";

结果:

+——-+———+———+————–+ | Hours | Minutes | Seconds | Microseconds | +——-+———+———+————–+ | 10 | 07 | 30 | 123456 | +——-+———+———+————–+

仅传递 avalue 不适用于此函数:TIME

SELECT 
    DATE_FORMAT('10:07:30.123456', '%H') AS "Hours",
    DATE_FORMAT('10:07:30.123456', '%i') AS "Minutes",
    DATE_FORMAT('10:07:30.123456', '%s') AS "Seconds",
    DATE_FORMAT('10:07:30.123456', '%f') AS "Microseconds";

结果:

+——-+———+———+————–+ | Hours | Minutes | Seconds | Microseconds | +——-+———+———+————–+ | NULL | NULL | NULL | NULL | +——-+———+———+————–+ 1 row in set, 4 warnings (0.003 sec)

让我们看看警告:

SHOW WARNINGS;

结果:

+———+——+———————————————+ | Level | Code | Message | +———+——+———————————————+ | Warning | 1292 | Incorrect datetime value: ‘10:07:30.123456’ | | Warning | 1292 | Incorrect datetime value: ‘10:07:30.123456’ | | Warning | 1292 | Incorrect datetime value: ‘10:07:30.123456’ | | Warning | 1292 | Incorrect datetime value: ‘10:07:30.123456’ | +———+——+———————————————+