Только получить время От даты Время для сравнения

#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)