我需要sybase中的sql脚本或至少ansi sql给出当前的日期时间,我可以得到当前的工作班次。
由于第一天和第二天之间的变化,我在第三班时遇到了麻烦
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
答案 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