2015-09-04 2 views
0

Спецификации: Я использую MySQL 5.6 с SQLWorkbench, SequelPro на OSX YosemiteMySQL - Вычитание время от длительности (НЕ DateTime)

фон запроса: Я пытаюсь исправить набор TIMESTAMPDIFF продолжительности для выходных и праздничных дней. У меня есть 2 хранимых процедуры, которые дают мне количество суббот, воскресений и праздничных дней между двумя датами - они работают нормально. Чтобы получить исправленное TIMESTAMPDIFF, я поэтому умножаю количество суббот, воскресений и праздников на 24, чтобы получить количество часов, которые нужно вычесть, а затем вычесть это число из TIMESTAMPDIFF.

Пример: В качестве примера, если временная метка А 14:00 в пятницу и временная метка Б 14:01 во вторник, сырой TIMESTAMPDIFF это 96:01:00. Предполагая, что понедельник - праздник, а выходные - 48:00:00, я хочу вычесть 72:00:00 с 96:01:00, чтобы получить «разницу в деловых деньках» 24:01:00.

Проблема: Когда я делаю что-то вроде "96:01:00" - "72:00:00" as date_sub_test, я получаю 24. Я потерял все форматирование, включая 01 минуту. Продолжительность не DATETIME, так как они не соответствуют датам календаря, поэтому я не могу использовать DATE_ADD/DATE_SUB.

Вопрос: Как вычитать время из продолжительности, сохраняя форматирование и соответствующую базовую систему 60, например, 60 минут в час, а не 100?

Заранее благодарен!

+2

MySql или Microsoft SQL Server или оба? – lad2025

+0

MySQL - вопрос отредактирован - спасибо – geonaut

+1

Вы пробовали функцию TIMEDIFF? https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timediff – Jaydee

ответ

1

Как Jaydee упоминает в comment:

Пытались ли вы функцию TimeDiff? https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timediff

TIMEDIFF был тем, что я искал. Я также добавил в ABS(), чтобы сделать отрицательные временные разницы положительными, и MAKETIME(), чтобы создать время из целого числа.

0

Использование SEC_TO_TIME и TIME_TO_SEC как

SELECT SEC_TO_TIME(TIME_TO_SEC('96:01:00')-TIME_TO_SEC('72:00:00')) 

вы можете использовать ABS как этот

SELECT SEC_TO_TIME(ABS(TIME_TO_SEC('96:01:00')-TIME_TO_SEC('172:00:00'))) 
+0

Этот способ переключения на секунды с 'TIME_TO_SEC' для вычисления, а затем с использованием' SEC_TO_TIME' для форматирования вывода также работает. – geonaut

Смежные вопросы