Ho una query mySql che aggiunge un certo intervallo di tempo al campo datetime.sql - aggiunta intervallo di tempo con salti di determinati periodi
UPDATE table T
SET T.ending = DATE_ADD(T.ending, INTERVAL T.hours * 3600 * some_other_variable_factors SECONDS))
Ora, ho bisogno di rilevare se nuovo tempo finale è tra alcune ore (diciamo 20:00-06:00), che dovrebbero essere esclusi dal calcolo.
Ie. se il vecchio finale è oggi, 19:58 e stiamo aggiungendo 4 minuti, il nuovo finale dovrebbe essere domani, 06:02
Ulteriore difficoltà è che il tempo di aggiunta può essere maggiore di 24 ore. Quindi se il vecchio termine è oggi, alle 19.00 e aggiungiamo 24 ore, il nuovo fine dovrebbe essere dopodomani, 15.00 (che suona come un titolo di un film davvero brutto;)
C'è modo di ottenere questo in mysql? In una query? Stavo anche pensando alle stored procedure, ma non ho alcuna esperienza con.
Alcuni dati di test:
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');
e dove è 48? o 72? vorrei fare a meno di avere un enorme cambiamento qui –
Cosa sono '48' o' 72' e perché pensi che dovrebbero essere qui? – Quassnoi
Ore da aggiungere come intervallo. Perché t_ending è DATETIME, non TIME –