angegeben ist Ich habe eine Jobtabelle mit einer "Schlafphase", und ich möchte keine Zeilen im Bereich zwischen sleep_start
und sleep_end
zurückgeben.Zeilen im Zeitbereich überspringen, der in Tabelle
CREATE TABLE `jobs` (
`job_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`sleep_start` time DEFAULT NULL,
`sleep_end` time DEFAULT NULL,
PRIMARY KEY (`account_id`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Jeder Job hat einen Zeitrahmen, wo sie nicht genannt werden sollten, die 00:00:00
in einem Zeitformat angegeben wird
Dann möchte ich würde eine Abfrage wie
SELECT * FROM jobs WHERE TIME(NOW()) NOT BETWEEN sleep_start AND sleep_end
laufen und nur bekommen Jobs, die nicht schlafen.
Jetzt scheint dies zu funktionieren, wenn sleep_start
und sleep_end
am selben Tag sind und die Zeitspanne 00:00:00
nicht überschreitet. In diesem Fall werden diese Zeilen immer zurückgegeben.
Wie kann ich die Abfrage ändern, damit sie in allen Szenarien funktioniert?
'' 'SELECT * FROM Jobs WO NICHT ZEIT (NOW()) BETWEEN sleep_start AND sleep_end'''' –
Spanning Mitternacht macht für chaotischen Code; kann es nicht in einem einfachen Ausdruck tun. –
Vielleicht wäre es einfacher, die Abfrage zu ändern und mit der 'start' Zeit zu bleiben, aber' sleep_end' in 'sleep_duration' int zu ändern, die die Schlafzeit in Stunden enthält, dann ein Datum aus der Zeit und heute, gleich mit + Intervall konstruieren X Stunden – maddo7