#sql #postgresql #datetime
Вопрос:
SELECT
TO_CHAR(s.start_time at time zone 'Asia/Singapore','HH24:MI:SS PM') AS roster_starttime,
TO_CHAR(c.time_server at time zone 'Asia/Singapore','HH24:MI:SS PM') AS Clock_TIme,
TO_CHAR(((c.time_server at time zone 'Asia/Singapore')::time - (s.start_time at time zone 'Asia/Singapore')::Time ),'HH "Hours" MI "minutes"') AS lateness_minutes
FROM
employee_info e
INNER JOIN
shifts s ON s.employee_id = e.employee
INNER JOIN
clock c ON c.shift = s.id
Кто-то перепутал дату смены, но время указано правильно, поэтому я хочу просто получить время от обоих c.time_server
и s.start_time
. И вычтите их, чтобы узнать время, если кто-то опоздал в тот день ( lateness_minutes
).
Вот примерный результат, когда я сделаю это в конце
Разве это не должно быть всего 11 минут? как я могу исправить эту проблему?
Комментарии:
1.
time_server::time
?
Ответ №1:
Вы можете просто привести timestamp
к любому date
или time
, например
SELECT
'2021-09-17 10:30:47'::time,
'2021-09-17 10:30:47'::date,
to_char('2021-09-17 10:30:47'::time,'HH "Hours" MI "minutes"');
time | date | to_char
---------- ------------ ---------------------
10:30:47 | 2021-09-17 | 10 Hours 30 minutes
(1 Zeile)