"R.Smith" wrote...
>
> On 2015-07-30 10:59 PM, jose isaias cabrera wrote:
>>
>> Ok, I have one more option for you, and since you think it's fun, I need 
>> to exclude Saturdays and Sundays.  I have a hack in the programming side 
>> of things, but I would like to do it right from SQLite.  Thougths?
>
>    WITH DTBase(HrsToAdd, DayStartsAt, HrsPerDay, HrsNow) AS (SELECT
>         5.5,
>         8.5,
>         8.5,
>         (CAST(strftime('%H','now','localtime') AS
>    REAL)+(CAST(strftime('%M','now','localtime') AS REAL)/60)-8.5)
>
>    ), DTFill(HrsToFillToday,HrsRemain) AS (SELECT
>         MAX(HrsPerDay-HrsNow,0),
>         MAX(HrsToAdd-MAX(HrsPerDay-HrsNow,0),0)
>         FROM DTBase
>
>    ), DTDays(DaysToAdd,DayHrsToAdd) AS (SELECT
>         CAST((HrsRemain/HrsPerDay) AS INT),
>         (HrsRemain-(CAST((HrsRemain/HrsPerDay) AS INT)*HrsPerDay))
>         FROM DTFill,DTBase
>
>    ), DTTime(DaysToAdd,DayHrsToAdd) AS (SELECT DaysToAdd,
>         (DayStartsAt+(CASE WHEN HrsRemain>0 THEN DayHrsToAdd+24 ELSE
>    HrsNow+HrsToFillToday END))
>         FROM DTBase,DTFill,DTDays
>
>    ), NewDT(NewDateTime) AS (SELECT
>         datetime( 'now', 'localtime', 'start of day', '+'||DaysToAdd||'
>    days', '+'||DayHrsToAdd||' hours') AS NewTime
>         FROM DTTime
>
>    ), WkEnd(WEDays) AS (
>         SELECT ((CAST(DaysToAdd AS INT)/7)*2) FROM DTTime
>         UNION ALL
>         SELECT (WEDays+1) FROM WkEnd,NewDT WHERE
>    (strftime('%w',datetime(NewDateTime,'+'||WEDays||' day')) IN ('0','6'))
>    )
>    SELECT datetime( 'now', 'localtime', 'start of day',
>    '+'||(MAX(DaysToAdd)+MAX(WEDays))||' days', '+'||MAX(DayHrsToAdd)||'
>    hours') AS NewTime
>    FROM DTTime, WkEnd;
>
>
>
> Wait... Let me guess... next you want Holidays added too, right?
>
> Well, just in case you do... here is the SQL:
> (Just add your own country's Holidays in the HDays CTE)
>
>    WITH DTBase(HrsToAdd, DayStartsAt, HrsPerDay, HrsNow) AS (SELECT
>         5.5,
>         8.5,
>         8.5,
>         (CAST(strftime('%H','now','localtime') AS
>    REAL)+(CAST(strftime('%M','now','localtime') AS REAL)/60)-8.5)
>
>    ), HDays(HoliDay) AS (
>         SELECT '01-01' UNION ALL  -- New Year's
>         SELECT '05-01' UNION ALL  -- Worker's
>         SELECT '07-04' UNION ALL  -- Independence
>         SELECT '12-25'            -- Xmas
>
>    ), DTFill(HrsToFillToday,HrsRemain) AS (SELECT
>         MAX(HrsPerDay-HrsNow,0),
>         MAX(HrsToAdd-MAX(HrsPerDay-HrsNow,0),0)
>         FROM DTBase
>
>    ), DTDays(DaysToAdd,DayHrsToAdd) AS (SELECT
>         CAST((HrsRemain/HrsPerDay) AS INT),
>         (HrsRemain-(CAST((HrsRemain/HrsPerDay) AS INT)*HrsPerDay))
>         FROM DTFill,DTBase
>
>    ), DTTime(DaysToAdd,DayHrsToAdd) AS (SELECT DaysToAdd,
>         (DayStartsAt+(CASE WHEN HrsRemain>0 THEN DayHrsToAdd+24 ELSE
>    HrsNow+HrsToFillToday END))
>         FROM DTBase,DTFill,DTDays
>
>    ), NewDT(NewDateTime) AS (SELECT
>         datetime( 'now', 'localtime', 'start of day', '+'||DaysToAdd||'
>    days', '+'||DayHrsToAdd||' hours') AS NewTime
>         FROM DTTime
>
>    ), WkEnd(WEDays) AS (
>         SELECT ((CAST(DaysToAdd AS INT)/7)*2) FROM DTTime
>       UNION ALL
>         SELECT (WEDays+1) FROM WkEnd,NewDT
>          WHERE (strftime('%w',datetime(NewDateTime,'+'||WEDays||'
>    day')) IN ('0','6')) OR
>    (strftime('%m-%d',datetime(NewDateTime,'+'||WEDays||' day')) IN
>    (SELECT Holiday FROM HDays))
>
>    )
>    SELECT datetime( 'now', 'localtime', 'start of day',
>    '+'||(MAX(DaysToAdd)+MAX(WEDays))||' days', '+'||MAX(DayHrsToAdd)||'
>    hours') AS NewTime
>    FROM DTTime, WkEnd;

How much I owe you? :-)  The holidays was the next question. ;P  Thanks. 
This will help me understand CTE much deeper/better.  Thanks.

Reply via email to