Angesichts der einen Fall in der Spezifikation, ist es ziemlich einfach. Was in der Spezifikation fehlt, sind Beispiele von Stime- und/oder Zeitwerten, die gleich sind oder ganz oder teilweise außerhalb des Clientbike-Bereichs liegen. Oder ätime Werte, die gleich sind. Für Suchparameter und für Spaltenwerte. (Ich vermute stark, dass es mehr zu der Spezifikation als nur den einen Fall gibt.)
Als Ausgangspunkt ist hier ein Beispiel, das passiert, um für den Fall in der Spezifikation zu "arbeiten". Dies gibt eine Zeile für jede Zeile in Clientbike zurück.
Setup
CREATE TABLE clientbike
(id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY
, stime DATE NOT NULL
, etime DATE NOT NULL
);
INSERT INTO clientbike (stime,etime) VALUES
('2016-04-01','2016-04-30')
, ('2016-05-01','2016-05-30') ;
Beispiel Abfrage
SELECT b.id
, IF(q.etime >= b.stime AND q.stime < b.etime, DATEDIFF(q.etime,q.stime), 0) AS days
FROM clientbike b
CROSS
JOIN (SELECT '2016-04-05' + INTERVAL 0 DAY AS stime
, '2016-04-07' + INTERVAL 0 DAY AS etime
) q
ORDER BY b.id
HINWEIS: Die "Suche" Werte werden in der Inline-View q geliefert.
kehrt
id days
---- ----
1 2
2 0
Als lächerlich Beispiel einer anderen Abfrage, die auch die gegebene Spezifikation erfüllen würde, aber wäre praktisch unmöglich, auf andere Fälle zu erweitern ...
SELECT b.id
, IF( b.stime = '2016-04-01'
AND b.etime = '2016-04-30'
AND q.stime = '2016-04-05'
AND q.etime = '2016-04-07'
, '2 Days...'
, ''
) AS result
FROM clientbike b
CROSS
JOIN (SELECT '2016-04-05' + INTERVAL 0 DAY AS stime
, '2016-04-07' + INTERVAL 0 DAY AS etime
) q
kehrt
id result
---- ---------
1 2 Days...
2
eine Idee, über diese Frage ... –
Welche Datentyp sind 'stime' und' etime'? –
Es ist mir etwas unklar, was Sie erreichen wollen. Möchten Sie die Anzahl der Tage von '2016-04-05' bis '2016-04-07' zählen? Das wäre meiner Meinung nach 3 (5., 6., 7.). Könnten Sie bitte Ihre Frage klären? Enthält Ihre Tabelle nur eine Zeile? – PerlDuck