Tengo una consulta mySql que agrega cierto intervalo de tiempo al campo datetime.sql - sumando el intervalo de tiempo con la omisión de cierto período
UPDATE table T
SET T.ending = DATE_ADD(T.ending, INTERVAL T.hours * 3600 * some_other_variable_factors SECONDS))
Ahora, necesito para detectar si la nueva hora de finalización está entre algunas horas (digamos 20:00-06:00), que debe ser excluido del cálculo.
Ie. si la terminación anterior es hoy, 19:58 y estamos agregando 4 minutos, la nueva finalización debe ser mañana, 06:02
La dificultad adicional es que la cantidad de tiempo para agregar puede ser mayor a 24 horas. Así que si el viejo final es hoy, 19.00 y estamos añadiendo 24 horas, nuevo final debe ser pasado mañana, 15.00 (que suena como un título de una película mala;)
¿Hay manera de lograr esto en mysql? En una consulta? También estaba pensando en procedimientos almacenados, pero no tengo ninguna experiencia con.
algunos datos de prueba:
CREATE TABLE IF NOT EXISTS `tt` (
`source` datetime NOT NULL,
`hours` int(11) NOT NULL,
`off_start` int(11) NOT NULL,
`off_long` int(11) NOT NULL,
`correct` datetime NOT NULL
) ENGINE=InnoDb;
INSERT INTO `tt` (`source`, `hours`, `off_start`, `off_long`, `correct`) VALUES
('2010-11-11 12:00:00', 1, 20, 10, '2010-11-11 13:00:00'),
('2010-11-11 19:00:00', 1, 20, 10, '2010-11-12 06:00:00'),
('2010-11-11 19:00:00', 2, 20, 10, '2010-11-12 07:00:00'),
('2010-11-11 19:00:00', 3, 20, 10, '2010-11-12 08:00:00'),
('2010-11-11 19:00:00', 24, 20, 10, '2010-11-13 15:00:00'),
('2010-11-11 19:00:00', 48, 20, 10, '2010-11-15 11:00:00'),
('2010-11-11 19:00:00', 72, 20, 10, '2010-11-17 07:00:00');
y donde es 48? o 72? me gustaría tener un cambio enorme aquí –
¿Qué es '48' o' 72' y por qué crees que deberían estar aquí? – Quassnoi
Horas para agregar como intervalo. Debido a que t_ending es DATETIME, no TIME –