Php 如何处理SQL中的运动比赛时间结果格式,最好是

Php 如何处理SQL中的运动比赛时间结果格式,最好是,php,sql,mariadb,Php,Sql,Mariadb,许多运动/比赛的计时通常精确到1/100秒,有些甚至精确到1/1000秒 游泳中的两个随机示例,使用了1/100秒精度(格式为'minutes:seconds,100th of second'): 秒字段后的分隔符可以是逗号或点-这两种都可以在专业计时系统中看到 如何在SQL/MariaDB中实现这种格式设置,应该使用什么字段类型?我认为在输入数据时,有必要使用第二精度的1/1000,但在查询中将输出格式化为1/100。您可能应该使用MySQL/MariaDBTIME 看 上面的例子可以这样做(

许多运动/比赛的计时通常精确到
1/100
秒,有些甚至精确到
1/1000

游泳中的两个随机示例,使用了
1/100
秒精度(格式为
'minutes:seconds,100th of second'
):

秒字段后的分隔符可以是逗号或点-这两种都可以在专业计时系统中看到


如何在SQL/MariaDB中实现这种格式设置,应该使用什么字段类型?我认为在输入数据时,有必要使用第二精度的
1/1000
,但在查询中将输出格式化为
1/100

您可能应该使用MySQL/MariaDB
TIME

上面的例子可以这样做(使用
结果时间(2)
):

创建表格“游泳比赛”(
`游泳者id`INT(10)未签名非空
,`distance`SMALLINT(5)无符号非空
,`style`VARCHAR(25)不为空
,`result`时间(2)不为空
);
插入“游泳比赛”(
`游泳者身份证`
距离`
“风格`
“结果`
)
价值观(
'1'
,'50'
“仰泳”
,'0:00:34.12'
)
,(
'1'
,'1500'
“自由泳”
,'0:18:49.02'
);

谢谢你的建议。使用
datetime(2)
格式化是一个可行的选项,但不需要日期部分

MariaDB [(none)]> SELECT CONVERT('2019-04-01 00:03:19.3200000',datetime(2));
+----------------------------------------------------+
| CONVERT('2019-04-01 00:03:19.3200000',datetime(2)) |
+----------------------------------------------------+
| 2019-04-01 00:03:19.32                             |
+----------------------------------------------------+
1 row in set, 1 warning (0.005 sec)
使用
TIME(2)
作为我的数据类型是正确的

仅出于历史兴趣:这是何时在MariaDB/MySQL中实现的?5-6年前,我研究过一个类似的问题,但当时我找不到这个:)

再次感谢:)

存储时间(3)

在转换为
时间(3)
之前替换(列“,”和“.”)
,以便逗号将转换为句点,而不会在转换过程中出错

mysql> SELECT CONVERT('0:1:23.456', TIME(3));
+--------------------------------+
| CONVERT('0:1:23.456', TIME(3)) |
+--------------------------------+
| 00:01:23.456                   |
+--------------------------------+

mysql> SELECT CONVERT('0:1:23,456', TIME(3));
+--------------------------------+
| CONVERT('0:1:23,456', TIME(3)) |
+--------------------------------+
| 00:01:23.000                   |   -- lost fraction because of comma
+--------------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> SHOW WARNINGS;
+---------+------+----------------------------------------------+
| Level   | Code | Message                                      |
+---------+------+----------------------------------------------+
| Warning | 1292 | Truncated incorrect time value: '0:1:23,456' |
+---------+------+----------------------------------------------+
已完成的示例:

mysql> SELECT CONVERT(REPLACE('0:1:23,456', ',', '.'), TIME(3));
+---------------------------------------------------+
| CONVERT(REPLACE('0:1:23,456', ',', '.'), TIME(3)) |
+---------------------------------------------------+
| 00:01:23.456                                      |
+---------------------------------------------------+

mysql> SELECT CONVERT(REPLACE('0:1:23,456', ',', '.'), TIME(3)) with_comma;
+--------------+
| with_comma   |
+--------------+
| 00:01:23.456 |
+--------------+

mysql> SELECT CONVERT(REPLACE('0:1:23.456', ',', '.'), TIME(3)) with_dot;
+--------------+
| with_dot     |
+--------------+
| 00:01:23.456 |
+--------------+

mysql> SELECT CONVERT(REPLACE('0:1:23.45', ',', '.'), TIME(3)) with_2_digits;
+---------------+
| with_2_digits |
+---------------+
| 00:01:23.450  |
+---------------+

您可以使用数据类型这正是我设置表格的方式:)我所缺少的时间(2)就是
时间。是否有一种方式可以默认设置时间字段的格式,而不使用
小时
部分?我只需要与开放水域(10公里)事件相关的小时数,这在某种程度上是罕见的。@dav用于输出<代码>选择时间格式(结果,'%i:%s.%f')作为游泳比赛的短时间
使用
时间(3)
获得小数点后3位。
mysql> SELECT CONVERT(REPLACE('0:1:23,456', ',', '.'), TIME(3));
+---------------------------------------------------+
| CONVERT(REPLACE('0:1:23,456', ',', '.'), TIME(3)) |
+---------------------------------------------------+
| 00:01:23.456                                      |
+---------------------------------------------------+

mysql> SELECT CONVERT(REPLACE('0:1:23,456', ',', '.'), TIME(3)) with_comma;
+--------------+
| with_comma   |
+--------------+
| 00:01:23.456 |
+--------------+

mysql> SELECT CONVERT(REPLACE('0:1:23.456', ',', '.'), TIME(3)) with_dot;
+--------------+
| with_dot     |
+--------------+
| 00:01:23.456 |
+--------------+

mysql> SELECT CONVERT(REPLACE('0:1:23.45', ',', '.'), TIME(3)) with_2_digits;
+---------------+
| with_2_digits |
+---------------+
| 00:01:23.450  |
+---------------+