Когда я использую командную строку, этот запрос дает мне приятные результаты (он показывает дуальность, о чем и говорит TIMEDIFF):
mysql> select timediff(end_time_stamp,start_time_stamp) from test_runs;
+-------------------------------------------+
| timediff(end_time_stamp,start_time_stamp) |
+-------------------------------------------+
| 00:00:07 |
| 00:00:11 |
| 00:01:23 |
+-------------------------------------------+
3 rows in set (0.00 sec)
Когда я помещаю его в сетку БД в Delphi, TIMEDIFF форматируются как 12:00:07 AM
, что мне не нужно (это выглядит как время, а не продолжительность).
Я использую AnyDac, и когда я открываю редактор запросов во время разработки и выполняю его, результат также 12:00:07 AM
, поэтому кажется, что AnyDac по какой-то причине его форматирует.
Как я могу получить вывод, например, 00:00:07 (длительность, а не время)?
- Могу ли я настроить запрос AnyDac?
- Могу ли я явно отформатировать вывод с помощью инструкции MySql?
- Есть ли функция OnXXX(), которую я могу преобразовать в код (и как)?
[Обновление] Ну, этот уродливый кусок кода делает то, что я хочу, но есть ли более элегантный способ?
SELECT run_id,
start_time_stamp,
end_time_stamp,
CONCAT(CONCAT(CONCAT(CONCAT(LPAD(EXTRACT(HOUR FROM timediff(end_time_stamp,start_time_stamp)), 2, '0'), ":"),LPAD(EXTRACT(MINUTE FROM timediff(end_time_stamp,start_time_stamp)), 2, '0'), ":"), LPAD(EXTRACT(SECOND FROM timediff(end_time_stamp,start_time_stamp)), 2, '0'))) AS duration,
description
FROM test_runs ORDER BY start_time_stamp DESC