2017-08-23 5 views
0

私はこれらの日付の間にいくつかの日をexculdeする必要がある2つの日付(例:ユーザーが変更することができ毎週木曜日、Wendesdayしかし、これらの日は動的である)間の作業日数を見つける必要がありMySQLのクエリを使用して2つの日付の間の正確な作業日数と時間を取得するには?

私は添付WEEK( '2014年12月30日21時59分00秒' -

SELECT CONCAT (
FLOOR(TIMESTAMPDIFF(SECOND, '2016-12-09 17:13:00', '2017-01-01 17:34:00')/(24*60*60)) - 
((WEEK('2015-01-01 17:07:00') - WEEK('2014-12-30 21:59:00')) * 2) - 
(case when weekday('2017-01-01 17:34:00') = 6 then 1 else 0 end) - 
(case when weekday('2016-12-09 21:59:00') = 5 then 1 else 0 end), 'Days ', 

TIME_FORMAT(
SEC_TO_TIME((TIMESTAMPDIFF(SECOND, DATE_FORMAT('2016-12-09 21:59:00', '%Y-%m-%d %H:%i'), DATE_FORMAT('2017-01-01 17:34:00', '%Y-%m-%d %H:%i')) -(FLOOR(TIMESTAMPDIFF(SECOND,DATE_FORMAT('2016-12-09 21:59:00', '%Y-%m-%d %H:%i'), DATE_FORMAT('2017-01-01 17:34:00', '%Y-%m-%d %H:%i'))/(24*60*60))*24*60*60))), '%H:%i'), 'Hrs' 
) 

しかし、私は週差の問題((WEEK( '2015年1月1日17時07分00秒')を取得しています以下のサンプルコード))* 2)、週差の代わりにROUND(DATEDIFF(end_date、start_date)/ 7、0)を試してみました。

答えて

0

5日(土曜日)、6日(日曜日)の2営業日を除いて、以下のクエリを確認してください。

SELECT created_at, updated_at, IF(
(YEAR(created_at)=YEAR(updated_at)), 
CONCAT (FLOOR(TIMESTAMPDIFF(SECOND, created_at, updated_at)/(24*60*60)) - 
    ((WEEK(updated_at) - WEEK(created_at)) * 2) - 
    (case when weekday(updated_at) = 6 then 1 else 0 end) - 
    (case when weekday(created_at) = 5 then 1 else 0 end), 'Days ', 

    TIME_FORMAT(
     SEC_TO_TIME((TIMESTAMPDIFF(SECOND, DATE_FORMAT(created_at, '%Y-%m-%d %H:%i'), DATE_FORMAT(updated_at, '%Y-%m-%d %H:%i')) -(FLOOR(TIMESTAMPDIFF(SECOND,DATE_FORMAT(created_at, '%Y-%m-%d %H:%i'), DATE_FORMAT(updated_at, '%Y-%m-%d %H:%i'))/(24*60*60))*24*60*60))), '%H:%i'), 'Hrs' 
), 

CONCAT (
    FLOOR(TIMESTAMPDIFF(SECOND, created_at, updated_at)/(24*60*60)) - 
    (((((YEAR(updated_at)-YEAR(created_at))*52)+WEEK(updated_at)) - WEEK(created_at)) * 2) - 
    (case when weekday(updated_at) = 6 then 1 else 0 end) - 
    (case when weekday(created_at) = 5 then 1 else 0 end), 'Days ', 
    TIME_FORMAT(
     SEC_TO_TIME((TIMESTAMPDIFF(SECOND, DATE_FORMAT(created_at, '%Y-%m-%d %H:%i'), DATE_FORMAT(updated_at, '%Y-%m-%d %H:%i')) -(FLOOR(TIMESTAMPDIFF(SECOND,DATE_FORMAT(created_at, '%Y-%m-%d %H:%i'), DATE_FORMAT(updated_at, '%Y-%m-%d %H:%i'))/(24*60*60))*24*60*60))), '%H:%i'), 'Hrs' 
) 
) 
FROM Test_table 
関連する問題