Как вычесть два столбца, которые раз в SQL-запрос доступа - PullRequest
0 голосов
/ 03 мая 2011

У меня есть две колонки в одной из таблиц: Arrival_Time и Leaving_Time.Оба поля времени имеют следующий формат: HH:MM:SS.

Я хочу вычесть Leaving_Time из Arrival_Time, например:

Время прибытия: 02:00:00Leaving_time: 02:45:00 = 45 минут.

Я пробовал этот запрос:

SELECT  (Jobs.Leaving_time) - (Jobs.Arrival_Time) AS Time_Difference
FROM Technicians,Jobs, Tech_Allocation
WHERE Jobs.Job_ID=Tech_Allocation.Job_ID     
  AND Tech_Allocation.Technician_ID=Technicians.Technician_ID
ORDER BY  (Jobs.Leaving_time) - (Jobs.Arrival_Time) ASC;

Запрос выполняется, но результаты вычитания отображаются в десятичных, а не в минутах, как я хочуим быть.

спасибо

Ответы [ 3 ]

3 голосов
/ 03 мая 2011

В Access вы захотите взглянуть на функцию DateDiff () .

1 голос
/ 03 мая 2011

В своем вопросе вы сказали, что хотите, чтобы продолжительность отображалась в минутах.Однако в комментарии вы сказали, что хотите, чтобы результат отображался в виде Часа: Минуты: Секунды.

Используйте функцию Format () для отображения значения с плавающей запятой в виде Часа: Минуты: Секунды.

SELECT Format(j.Leaving_time - j.Arrival_Time, "hh:nn:ss") AS Time_Difference
FROM Technicians AS t, Jobs AS j, Tech_Allocation AS ta
WHERE j.Job_ID = ta.Job_ID     
  AND ta.Technician_ID = t.Technician_ID
ORDER BY 1 ASC;

Осторожно, этот подход действителен только для Time_Differences менее 24 часов.

Редактировать:

  1. Я использовал 1 в ORDER BY, чтобы ссылаться на первый элемент в списке полей,Это удобнее, чем записывать выражение поля в ORDER BY.
  2. Здесь вам не нужен ASC в ORDER BY.
  3. Я бы использовал Access 'конструктор запросов для соединения таблицс выражениями INNER JOIN, а не с подходом WHERE в старом стиле.
  4. Назначение коротких значимых алиасов для таблиц может сделать SQL более кратким и более простым для понимания людьми.
1 голос
/ 03 мая 2011

Поскольку вы используете MS Access, я нашел это обсуждение MS Office под названием Вовремя и сколько прошло . Пожалуйста, посмотрите и посмотрите, имеют ли смысл такие вещи, как totalminutes = Int(CSng(interval * 1440)).

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