как конвертировать странное varchar "время" в реальном времени в MySQL? - PullRequest
2 голосов
/ 13 ноября 2009

У меня есть значение времени, хранящееся в базе данных как varchar (4), и мне нужно преобразовать его в реальное время.

например, если время "23:59", я хочу, чтобы 23:59 вернулся.

Проблема в том, что между часами и минутами нет ":". Поэтому, когда я запускаю этот запрос

SELECT TIME_FORMAT('2359', '%h:%i');    -- 12:23, wtf??

Однако, если я запустил это:

SELECT TIME_FORMAT('23:59', '%h:%i');   -- returns 11:59 as expected.

Итак, подведем итог: 1. время хранится в базе данных как varchar (4). Пример:

1200, 1201, 0153, 1364, 1923
  1. Я хочу, чтобы время вернулось как 12-часовое время с двоеточием.

У меня болит мозг, и это намного проще, чем я понимаю ...

как это, но для mysql Преобразование varchar в datetime в SQL Server mysql 12 часов в 24 часа преобразование времени

Ответы [ 5 ]

1 голос
/ 14 ноября 2009

Использование таблицы с именем test со столбцом с именем string и значениями

2300
2100
1200
0430
0430

С запросом

select concat(time_format(concat(substring(string,-4,2),':',substring(string,3)),'%h:%i'),
   case when string >= 1200 then ' PM' else ' AM' end)
from test;

Вы получаете,

11:00 PM
09:00 PM
12:00 PM
04:30 AM
04:30 AM
1 голос
/ 13 ноября 2009

Похоже, что работает должным образом, если включены секунды:

mysql> SELECT TIME_FORMAT(235900, '%h %i %s');
+---------------------------------+
| TIME_FORMAT(235900, '%h %i %s') |
+---------------------------------+
| 0000 00 00 11 59 00             |
+---------------------------------+
1 row in set (0.00 sec)

Я даже отбросил кавычки - он отлично работает с целым числом.

Для подтверждения он делает правильные вещи:

mysql> SELECT TIME_FORMAT(235901, '%h %i %s');
+---------------------------------+
| TIME_FORMAT(235901, '%h %i %s') |
+---------------------------------+
| 11 59 01                        |
+---------------------------------+
1 row in set (0.00 sec)

Я пробовал несколько комбинаций, таких как 235960, 236059, 235999, и все они возвращают NULL.

1 голос
/ 13 ноября 2009

не берите в голову, это прекрасно работает:

TIME_FORMAT(CONCAT(SUBSTRING(THE_TIME, 1,2), ':', SUBSTRING(THE_TIME, 3,4)), '%h%i')
1 голос
/ 13 ноября 2009

А как насчет этого запроса?

SELECT TIME_FORMAT(STR_TO_DATE('2359', '%H%i'), '%h:%i %p');

Вот результат:

+------------------------------------------------------+
| TIME_FORMAT(STR_TO_DATE('2359', '%H%i'), '%h:%i %p') |
+------------------------------------------------------+
| 11:59 PM                                             | 
+------------------------------------------------------+
0 голосов
/ 14 ноября 2009

Это быстрый взлом, но, поскольку вы пропускаете ":" между 4-значным числом, как насчет вставки пропущенного двоеточия.

SELECT TIME_FORMAT( CONCAT( SUBSTRING('2359', 0, 2), ':', 
                            SUBSTRING('2359', 3, 2)), '%h:%i');

Конечно, замените 2359 именем столбца времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...