2015-06-11 2 views
0

У нас есть база данных, в которой есть таблица, в которой хранится информация о расписании, включая столбец часов и часов. Проблема в том, что кто-то из созданных этой таблицы сделал эти атрибуты целыми числами вместо времени или времени (это также могло быть вызвано программным обеспечением, которое создает расписание). Так, например, вместо того, чтобы говорить 8:00:00, говорится 480 (количество минут, прошедших в тот день). 18:00 (6 PM) показывает 1080, Midnight is 1440 и т. Д.Преобразование целого во время

Я должен запросить это для отчета и выполнить расчет, основанный на запланированных ударах, против фактических отработанных часов, которые хранятся в виде временного типа данных , Я пытаюсь преобразовать целые минуты во время дня в оператор select, чтобы иметь CTE, с которым я могу работать для нескольких сравнений. До сих пор это то, что я придумал (имейте в виду график выполняется с шагом четверть часа, следовательно, +0,25, 0,5, 0,75 и т.д.)

SELECT CASE CAST(ClockIN AS decimal)/60 
WHEN .25 THEN CAST('00:15:00.0000000' AS time) 
WHEN .5 THEN CAST('00:30:00.0000000' AS time) 
WHEN .75 THEN CAST('00:75:00.0000000' AS time) 
WHEN 1 THEN CAST('01:00:00.0000000' AS time) 
..... 
WHEN 24 THEN CAST('00:00:00.0000000' AS time) 
END AS ClockIn 

Я пытаюсь иметь очистить код и не выполнять слишком много вычислений, которые занимают ресурсы при каждом запуске отчета. Есть ли более простой способ сделать все это, я не думаю, что из коробки достаточно? Пока это единственный способ, которым я могу придумать то, что мне нужно, это целое число, представляющее прошедшее время, преобразованное в метку времени. Любые советы будут оценены!

ответ

0

Вы можете создать время, а затем использовать DATEADD, чтобы просто добавить минуты к времени. Таким образом, через 480 минут вы добавите его в новое время, созданное «00:00», и оно должно покинуть вас в 8:00 утра.

DATEADD(minute, ClockIN, '00:00') 
+0

Так что нет никакой причины я не мог использовать еще один столбец, который хранит дату расписания внутри там, например: DATEADD (минута, ClockIN, SchdDate). У препятствий, которые у меня есть с этим, будет запись в полночь на следующий день, так как дни нашего расписания будут проходить с 00:01 до 12:00 утра следующего дня. Думаю, я всегда могу сделать случай, который проверяет полночь, и если он полночь, записывает дату, а если нет, то делает вышеуказанное преобразование. Спасибо за направление! – user2921015

+0

Да, вы должны иметь возможность использовать реальное время, а не только 00:00. Удачи! –

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