跳到主要内容

MAKETIME

描述

返回根据hour, minute, second组合出的时间值

该函数与 mysql 中的 makedate 函数 行为一致。

语法

MAKETIME(`<hour>`, `<minute>`, `<second>`)

参数

参数说明
hour时间的小时部分,支持整数类型(BIGINT)。取值范围被限制在 [-838, 838], 若输入值超过该范围,则自动修正为最接近的边界值。
minute时间的分钟部分,支持整数类型(BITINT)。允许的取值范围为 [0, 59]。
second时间的秒数部分,支持整数(BIGINT)和小数类型(DOUBLE)。允许的取值范围为 [0, 60), 支持小数点后六位精度,若超过六位,会自动进行四舍五入。

返回值

返回一个TIME 类型的值,格式为 hour:minute:second。当输入的seconde为整数类型,输出值精度为 0,当其为小数类型时,输出值精度为最大精度 6。

  • minutesecond 超过允许范围,返回 NULL
  • 任一参数为 NULL,返回 NULL

举例

SELECT `hour`, `minute`, `sec`, MAKETIME(`hour`, `minute`, `sec`) AS ans FROM `test_maketime`;
+------+-------+--------+---------+-------------------+
| id | hour | minute | sec | ans |
+------+-------+--------+---------+-------------------+
| 1 | 12 | 15 | 30 | 12:15:30.000000 |
| 2 | 14 | 56 | 12.5789 | 14:56:12.578900 |
| 3 | 1234 | 11 | 4 | 838:59:59.000000 |
| 4 | -1234 | 6 | 52 | -838:59:59.000000 |
| 5 | 20 | 60 | 12 | NULL |
| 6 | 14 | 51 | 66 | NULL |
| 7 | NULL | 15 | 16 | NULL |
| 8 | 7 | NULL | 8 | NULL |
| 9 | 1 | 2 | NULL | NULL |
| 10 | 23 | -40 | 12 | NULL |
| 11 | 20 | 6 | -12 | NULL |
+------+-------+--------+---------+-------------------+

注:

  1. sec 列类型为 Float,所以输出格式全部为六位精度的时间值
  2. 1 - 2 为正常样例。
  3. 3 - 4 为 hour 越界情况样例(返回固定边界值)。
  4. 5 - 6 分别为 minute 参数和 sec 参数在正数区间超出合理范围的样例(返回 NULL)。
  5. 7 - 9 为任一参数为 NULL 的样例(返回 NULL)。
  6. 10 - 11 为 minute 和 sec 为负值的样例(即使绝对值合理也返回 NULL
SELECT `id`, `hour`, `minute`, MAKETIME(`hour`, `minute`, 27) AS ans FROM `test_maketime`;
+------+-------+--------+------------+
| id | hour | minute | ans |
+------+-------+--------+------------+
| 1 | 12 | 15 | 12:15:27 |
| 2 | 14 | 56 | 14:56:27 |
| 3 | 1234 | 11 | 838:59:59 |
| 4 | -1234 | 6 | -838:59:59 |
| 5 | 20 | 60 | NULL |
| 6 | 14 | 51 | 14:51:27 |
| 7 | NULL | 15 | NULL |
| 8 | 7 | NULL | NULL |
| 9 | 1 | 2 | 01:02:27 |
| 10 | 23 | -40 | NULL |
| 11 | 20 | 6 | 20:06:27 |
+------+-------+--------+------------+

注: sec 的输入类型为正数类型,故输出类型均为不带微秒的时间类型

-- second的精度超过六位会四舍五入取六位精度
SELECT MAKETIME(12, 7, 56.1234567);
+-----------------------------+
| MAKETIME(12, 7, 56.1234567) |
+-----------------------------+
| 12:07:56.123457 |
+-----------------------------+