programing

스포츠 경기 시간 결과 포맷팅을 SQL로 처리하는 방법, 가급적이면 Maria.DB

muds 2023. 8. 19. 10:57
반응형

스포츠 경기 시간 결과 포맷팅을 SQL로 처리하는 방법, 가급적이면 Maria.DB

많은 스포츠/경기에서 소요되는 시간은 일반적으로 다음과 같습니다.1/100th순식간에, 어떤 사람들은 심지어 까지.1/1000th순식간에

수영에서 나온 몇 가지 무작위 예는 다음과 같습니다.1/100th두 번째 정확도(형식)'minutes:seconds,100th of second'):

50m Backstroke 00:34,12

1500m Freestyle 18:49,02

seconds 필드 뒤의 구분 기호는 쉼표 또는 점일 수 있습니다. 둘 다 전문적인 시간 작업 시스템에서 볼 수 있습니다.

SQL/MariaDB에서 이 포맷은 어떻게 수행되며 어떤 필드 유형을 사용해야 합니까?나는 그것이 사용할 필요가 있다고 생각합니다.1/1000데이터를 입력할 때 두 번째 정확도를 나타내지만 출력 형식은 다음과 같습니다.1/100th조회 중에

MySQL/MariaDB를 사용해야 합니다.TIME.
시간 값의 소수(초)

위의 예는 다음과 같이 수행될 수 있습니다.result TIME(2)):

CREATE TABLE `swimming_race` (
    `swimmer_id` INT (10) unsigned NOT NULL
    ,`distance` SMALLINT (5) unsigned NOT NULL
    ,`style` VARCHAR(25) NOT NULL
    ,`result` TIME(2) NOT NULL
    );

INSERT INTO `swimming_race` (
    `swimmer_id`
    ,`distance`
    ,`style`
    ,`result`
    )
VALUES (
    '1'
    ,'50'
    ,'Backstroke'
    ,'0:00:34.12'
    )
    ,(
    '1'
    ,'1500'
    ,'Freestyle'
    ,'0:18:49.02'
    );

data in table after insert

제안해 주셔서 감사합니다.다음을 사용한 형식 지정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년 전에 비슷한 문제를 조사했지만 그 당시에는 이것을 찾을 수 없었습니다 :)

다시 한번 감사합니다 :)

TIME(3)보관용의

REPLACE(col, ',', '.')로 전환하기 전에TIME(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  |
+---------------+

언급URL : https://stackoverflow.com/questions/55450739/how-to-handle-sport-race-time-results-formatting-in-sql-preferrably-mariadb

반응형