sql - Calculate working shift giving current datetime in sybase -
i need sql script in sybase or @ least ansi sql giving current datetime, can current working shift.
- working shift '1' begins @ 08:00 , ends @ 15:30
- working shift '2' begins @ 15:30 , ends @ 23:00
- working shift '3' begins @ 23:00 , ends @ 08:00am of next day
i having trouble third shift, because of change between 1 day , next day
set @fechaactual = convert(datetime, 'jun 11 2015 11:00am', 100) --getdate() set @horacomienzoturno1 = convert(datetime,convert(varchar, @fechaactual, 101) + " 08:00:00 am") set @horafinturno1 = convert(datetime,convert(varchar, @fechaactual, 101) + " 03:29:59 pm") set @horacomienzoturno2 = convert(datetime,convert(varchar, @fechaactual, 101) + " 03:30:00 pm") set @horafinturno2 = convert(datetime,convert(varchar, @fechaactual, 101) + " 10:59:59 pm") set @horacomienzoturno3 = convert(datetime,convert(varchar, @fechaactual, 101) + " 11:00:00 pm") set @horafinturno3 = convert(datetime,convert(varchar, @fechaactual, 101) + " 07:59:59 am") if @fechaactual >= @horacomienzoturno1 , @fechaactual <= @horafinturno1 begin select 1 turno, @fechaactual fechaactual end if @fechaactual >= @horacomienzoturno2 , @fechaactual <= @horafinturno2 begin select 2 turno, @fechaactual fechaactual end if @fechaactual >= @horacomienzoturno3 , @fechaactual <= @horafinturno3 begin select 3 turno, dateadd(dd, -1, @fechaactual) fechaactual end
i have no sybase here, cannot try it. think need datepart function. function gets hours, or minutes datetime value, able check without thinking in days.
i did following changes:
i changed code show how works (maybe spelling not right)
i changed last condition or, because it´s impossible last shift worker, have hour > 23 , < 9 @ same time ;-)
hope may you. (sorry if doesn´t compile, it´s few years since don´t play sybase).
set @fechaactual = datepart("hhmi",convert(datetime, 'jun 11 2015 11:00am', 100)) set @horacomienzoturno1 = datepart("hhmi",convert(datetime,convert(varchar, @fechaactual, 101) + " 08:00:00 am")) set @horafinturno1 = datepart("hhmi",convert(datetime,convert(varchar, @fechaactual, 101) + " 03:29:59 pm")) set @horacomienzoturno2 = datepart("hhmi",convert(datetime,convert(varchar, @fechaactual, 101) + " 03:30:00 pm")) set @horafinturno2 = datepart("hhmi",convert(datetime,convert(varchar, @fechaactual, 101) + " 10:59:59 pm")) set @horacomienzoturno3 = datepart("hhmi",convert(datetime,convert(varchar, @fechaactual, 101) + " 11:00:00 pm")) set @horafinturno3 = datepart("hhmi",convert(datetime,convert(varchar, @fechaactual, 101) + " 07:59:59 am")) if @fechaactual >= @horacomienzoturno1 , @fechaactual <= @horafinturno1 begin select 1 turno, @fechaactual fechaactual end if @fechaactual >= @horacomienzoturno2 , @fechaactual <= @horafinturno2 begin select 2 turno, @fechaactual fechaactual end if @fechaactual >= @horacomienzoturno3 or @fechaactual <= @horafinturno3 begin select 3 turno, dateadd(dd, -1, @fechaactual) fechaactual end
edit added "mi"
datepart()
pattern, manage minutes
Comments
Post a Comment