Witajcie,
Natknąłem się w jednym z projektów na taki kod:
select case when SIGN(DateDiff(mi, DateAdd(hour, -33, GETUTCDATE()), t.TaskTimeFrom )) = -1 then '-' else '' end +
case when SIGN(DateDiff(mi, DateAdd(hour, -33, GETUTCDATE()), t.TaskTimeFrom )) *
DateDiff(mi, DateAdd(hour, -33, GETUTCDATE()), t.TaskTimeFrom ) / 60 < 10 then '0' else '' end +
convert(varchar(4), SIGN(DateDiff(mi, DateAdd(hour, -33, GETUTCDATE()), t.TaskTimeFrom )) *
DateDiff(mi, DateAdd(hour, -33, GETUTCDATE()), t.TaskTimeFrom ) / 60) + ':' +
case when (SIGN(DateDiff(mi, DateAdd(hour, -33, GETUTCDATE()), t.TaskTimeFrom )) *
DateDiff(mi, DateAdd(hour, -33, GETUTCDATE()), t.TaskTimeFrom )) - ((SIGN(DateDiff(mi, DateAdd(hour, -33, GETUTCDATE()), t.TaskTimeFrom )) *
DateDiff(mi, DateAdd(hour, -33, GETUTCDATE()), t.TaskTimeFrom ) / 60) * 60) < 10 then '0' else '' end +
convert(varchar(2), (SIGN(DateDiff(mi, DateAdd(hour, -33, GETUTCDATE()), t.TaskTimeFrom )) *
DateDiff(mi, DateAdd(hour, -33, GETUTCDATE()), t.TaskTimeFrom )) - ((SIGN(DateDiff(mi, DateAdd(hour, -33, GETUTCDATE()), t.TaskTimeFrom )) *
DateDiff(mi, DateAdd(hour, -33, GETUTCDATE()), t.TaskTimeFrom ) / 60) * 60) )
from v_tmp t
where ...
Pole t.TaskTimeFrom jest zwykłym DateTime, a efekt wyjściowy ma być taki, że ta data ma się zawsze wyświetlać w postaci HH:MM tyle, że jak widać w na powyższym przypadku może być -33:00 lub 29:55 itd. Zawsze musi to być Znak+DwucyfrowaLiczbaZZeremZPrzoduJesliJest<10:DwucyfrowaLiczbaZZeremZPrzoduJesliJest<10
Pytanko do was czy macie pomysł jak to "uprościć"?