WITH WorkingHours AS ( SELECT '08:00'::time AS start_time, '15:00'::time AS end_time )
SELECT t_id, generate_series(date_trunc('day', t_start), date_trunc('day', t_end), '1 day') AS day FROM t
ステップ 4: 分数を計算する関数時間
小数時間を計算する関数SELECT t_id, SUM(CASE WHEN EXTRACT(ISODOW FROM day) < 6 THEN COALESCE( f_worktime(day::timestamp + WorkingHours.start_time, day::timestamp + WorkingHours.end_time), '0' ) ELSE '0' END) AS work_time FROM WorkingHours CROSS JOIN ( SELECT t_id, day FROM temp ) AS temp GROUP BY 1
例
CREATE FUNCTION f_worktime(_start timestamp, _end timestamp) RETURNS interval LANGUAGE sql AS $func$ SELECT COALESCE(upper(tsrange(_start::timestamp, _end::timestamp)) - lower(tsrange(_start::timestamp, _end::timestamp)), '0')::interval; $func$ IMMUTABLE;
以上がPostgreSQL で週末を除いた 2 つの日付の間の労働時間を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。