计算工作班次,给出sybase

时间:2015-06-10 15:22:10

标签: sql sybase sybase-ase

我需要sybase中的sql脚本或至少ansi sql给出当前的日期时间,我可以得到当前的工作班次。

  • 工作班次'1'从08:00开始,到15:30结束
  • 工作班次'2'从15:30开始,到23:00结束
  • 工作班次'3'从23:00开始,到第二天上午8:00结束

由于第一天和第二天之间的变化,我在第三班时遇到了麻烦

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 AND @FechaActual <= @HoraFinTurno1
BEGIN
    SELECT 1 AS Turno, @FechaActual AS FechaActual
END

IF @FechaActual >= @HoraComienzoTurno2 AND @FechaActual <= @HoraFinTurno2 
BEGIN
    SELECT 2 AS Turno, @FechaActual AS FechaActual
END

IF @FechaActual >= @HoraComienzoTurno3 AND @FechaActual <= @HoraFinTurno3 
BEGIN
    SELECT 3 AS Turno, dateadd(dd, -1, @FechaActual) AS FechaActual
END

2 个答案:

答案 0 :(得分:2)

我这里没有sybase,然后无法尝试。我认为你需要的是datepart function。此功能仅获取日期时间值的小时数或分钟数,然后您可以在几天内轻松查看。

我做了以下更改:

  
      
  • 我更改了代码以显示它是如何工作的(也许我的拼写不正确)

  •   
  • 我将最后一个条件改为OR,因为最后一个轮班工作人员不可能有一个小时&gt; 23和&lt; 9点   同时; - )

  •   

希望它可以帮到你。 (对不起,如果它没有编译,但是几年后我没有使用sybase)。

datepart()
  

编辑create or replace trigger multiple after insert on t1 referencing new as new for each row declare count1 number; begin select count(distinct t2.customer) into count1 from t2 where trim(t2.id)= trim(:new.id); if count1 >=2 then :new.txt_field :='Please delete.'; end if; end;模式添加“mi”,同时管理分钟

答案 1 :(得分:1)

这是一个有效的代码,有点乱,但我试图清理它。

  
      
  • 如果实际日期超过12 AM,我必须减去一天才能开始3班
  •   
  • 另外还有一天转3结束
  •   
SET @FechaActual = getdate() --convert(datetime, 'JUN 12 2015 12:59:00AM', 100)
--Se toma la fecha actual, se convierte a varchar, se concatena la hora y se convierte a datetime nuevamente
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")

--Si son pasada las 12:00AM del turno 3, la fecha de comienzo de turno debe ser un dia antes, en caso contrario el fin de turno debe ser al dia siguiente
IF @FechaActual >= convert(datetime,convert(varchar, @FechaActual, 101) + " 12:00:00 AM") AND @FechaActual <= convert(datetime,convert(varchar, @FechaActual, 101) + " 07:59:59 AM")
BEGIN

        SET @FechaActualTurno3 = dateadd(dd, -1, @FechaActual)
        SET @HoraComienzoTurno3 = dateadd(dd, -1, convert(datetime,convert(varchar, @FechaActual, 101) + " 11:00:00 PM"))
        SET @HoraFinTurno3 = convert(datetime,convert(varchar, @FechaActual, 101) + " 07:59:59 AM")
END
ELSE
BEGIN
        SET @FechaActualTurno3 = @FechaActual
        SET @HoraComienzoTurno3 = convert(datetime,convert(varchar, @FechaActual, 101) + " 11:00:00 PM")
        SET @HoraFinTurno3 = dateadd(dd, 1, convert(datetime,convert(varchar, @FechaActual, 101) + " 07:59:59 AM"))
END

--Condiciones
IF @FechaActual >= @HoraComienzoTurno1 AND @FechaActual <= @HoraFinTurno1
BEGIN
    SELECT 1 AS Turno, convert(varchar, @FechaActual, 103) AS FechaActual
END

IF @FechaActual >= @HoraComienzoTurno2 AND @FechaActual <= @HoraFinTurno2 
BEGIN
    SELECT 2 AS Turno, convert(varchar, @FechaActual, 103) AS FechaActual
END

IF @FechaActual >= @HoraComienzoTurno3 AND @FechaActual <= @HoraFinTurno3 
BEGIN
    SELECT 3 AS Turno, convert(varchar, @FechaActualTurno3, 103) AS FechaActual
END