2016-11-12 11 views
0

Für eine where Klausel, wenn ich eine %h:%i Zeichenfolge habe, wie kann ich die letzte vorhandene datetime vor now() mit dieser Stunde/Minute-Kombination erhalten?MySQL erhalten Datum von Stunde: Minute Format

Einige fiktive select das gewünschte Verhalten zu zeigen (comb ist die magische Funktion/combinator ich brauche, die sich explizit auf now() oder nicht abhängen können):

mysql> select now(), comb('20:20'); 
+---------------------+---------------------+ 
| now()    | comb('20:20')  | 
+---------------------+---------------------+ 
| 2016-11-12 20:43:39 | 2016-11-12 20:20:00 | 
+---------------------+---------------------+ 

mysql> select now(), comb('20:20'); 
+---------------------+---------------------+ 
| now()    | comb('20:20')  | 
+---------------------+---------------------+ 
| 2016-11-11 01:43:39 | 2016-11-10 20:20:00 | 
+---------------------+---------------------+ 

mysql> select now(), comb('20:20'); 
+---------------------+---------------------+ 
| now()    | comb('20:20')  | 
+---------------------+---------------------+ 
| 2016-01-01 01:43:39 | 2015-12-31 20:20:00 | 
+---------------------+---------------------+ 
+0

Sie meinen zuletzt in "real life" oder in einer Tabelle mit anderen Bedingungen in der where-clase? – maraca

+0

Im "wirklichen Leben". Das letzte phische Datumsmoment, das dieser Stunde entspricht: Sekunden Kombination. –

+0

@maraca Es ist für eine select-Anweisung mit anderen where-Bedingungen, aber mein 'comb' soll in einer 'between'-Anweisung verwendet werden:' where ... und event_time zwischen comb (hour_min_str) und now() '. –

Antwort

2
select concat(date(if(time(now()) > '20:20', now(), date_sub(now(), INTERVAL 1 day))), ' 20:20'); 
+0

Richtig ... Ich vergaß, dass Sie concat in mysql +1 verwenden müssen – maraca

1

Hier ist ein Weg, um dorthin zu gelangen (Arbeiten in jede Sprache, wenn die Funktionen durch die entsprechenden ersetzt werden):

SELECT 
    CASE WHEN DATE_FORMAT(NOW(), '%H:%i') >= '20:20' THEN 
    STR_TO_DATE(CONCAT(DATE_FORMAT(NOW(), '%Y %d %e'), ' ', '20:20'), '%Y %d %e %H:%i') 
    ELSE 
    DATE_SUB(
     STR_TO_DATE(CONCAT(DATE_FORMAT(NOW(), '%Y %d %e'), ' ', '20:20'), '%Y %d %e %H:%i'), 
     INTERVAL 1 DAY 
    ) 
    END latest_valid_date 

Sieht aus wie ich einen mySQL Fehler gefunden ... die sonst null zurückkehrt, obwohl es sollte nicht ... gut es funktioniert, wenn Sie die subtrahieren Tag zuerst ... aber das sollte trotzdem funktionieren.

Verwandte Themen