2015-05-29 4 views
1

У меня есть таблица в Access 2013, которая будет следить за ежедневной посещаемостью на работе. В течение дня люди должны работать 8 часов. Вот скриншот таблицы: enter image description hereВычитание полей времени в Access

Колонка Тоталь = Время До - время от и это нормально.

Колонка недостающее имеет это = 8-формат (24 * Int ([Всего]) + час ([Всего]); "0") & ":" & Формат ([Всего]; "пп")

Проблема заключается в колонке Missing. Если в колонке «Всего» указано, что человек сделал 7 часов, а в пропавшей колонке должно быть 1 час (1 час отсутствует для завершения 8 часов в день)

Обратите внимание на вторую и последнюю строки ... по какой-либо причине он не рассчитать правильно ...

Когда есть 30 минут ... он не вычисляет правильно ... в последнем ряду он должен быть 1:30 пропавшим без вести (до 8 часов в день)

Как его рассчитать?

+0

Каковы типы данных * Время от * и * Время до *? – HansUp

+0

они Дата/Время datatype – Volkan

+0

Хорошо. Благодарю. Что эти поля содержат в качестве компонента даты? Если вы запускаете этот запрос, вы получаете * 1899-12-30 * во всех случаях? 'SELECT Format ([Time From]," yyyy-md "), Format ([Time Until]," yyyy-md ") FROM YourTable,' – HansUp

ответ

1

Значения даты/времени на самом деле являются номерами с плавающей запятой двойной точности. Это означает, что вы можете делать математику непосредственно на них. В результатах запроса вычисленные значения могут отображаться как float с двойной точностью ... но вы можете использовать Format() для представления их в желаемом формате времени.

Я протестировал этот запрос с вашими примерными данными в Access 2010. Он возвращает результаты, которые, я думаю, вы хотите.

SELECT 
    t.[Time From], 
    t.[Time Until], 
    Format((t.[Time Until] - t.[Time From]), 'h:nn') AS [Total], 
    Format(#08:00# - (t.[Time Until] - t.[Time From]), 'h:nn') AS [Missing] 
FROM tblVolkan AS t; 

Для любого случая, когда [Всего] больше, чем 8 часов, может быть, вы предпочитаете, чтобы отобразить [Missing] как отрицательное значение. Если это так, замените это выражение ...

IIf(#08:00# - (t.[Time Until] - t.[Time From]) < 0, '-', '') 
    & Format(#08:00# - (t.[Time Until] - t.[Time From]), 'h:nn') AS [Missing] 
+0

спасибо! ты замечательный! – Volkan

+0

Ну, у нас не будет отрицательных часов ... это нормально. Но у меня есть вопрос ... как мне подвести итог? Это дает мне ошибку. Я бы хотел, чтобы была потеряна сумма ... это возможно? спасибо – Volkan

+0

Это может быть сложно. Если сумма * Missing * составляет 26,5 часов, как и где это должно быть представлено? Я думаю, вы должны сделать это с другим запросом. – HansUp

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