Domanda

Voglio selezionare i record tra due date: una data start ed enddate (sono formato data/ora in SQL). Ho la seguente query SQL ma non funziona, qualcuno potrebbe dirmi cosa sto facendo di sbagliato?

"SELECT * 
FROM house 
WHERE startDate >= '2012/02/22 00:00:00' AND endDate <= '2012-02-25 00:00:00'"
È stato utile?

Soluzione

Suggerirei di convertire le date in un datatime e confrontarle, oltre a mantenere la data standard e coerente. Qualcosa di simile a:

"SELECT * 
FROM house 
WHERE DATE(startDate) >= DATE('2012-02-22 00:00:00') 
  AND DATE(endDate) <= DATE('2012-02-25 00:00:00')"

Nota: ho pensato che la tua data start e la data enddate fossero dello stesso formato delle stringhe fornite.

Altri suggerimenti

Vuoi tutte le righe startDate è '2012-02-22' o più tardi e endDate è '2012-02-22' o precedente? Quindi, usa questo:

SELECT * 
FROM house 
WHERE startDate >= '2012-02-22' 
  AND endDate < '2012-02-26'           --- notice the `<`, not `<=`
                                       --- and the `day+1`

Quando si utilizzano date con prodotti SQL, utilizzare meglio questo formato in query e dichiarazioni: '20120222' o questo (che trovo più facile da leggere: '2012-02-22'.

Usando le barre come '2012/02/22' o qualsiasi altro ordine di Year-Month-Day non è raccomandato.

Non è necessario includere la parte temporale. '2012-02-22 00:00:00' equivale a '2012-02-22'.

Usando endDate <= '2012-02-25 00:00:00' significa che qualsiasi riga con data 25 febbraio 2012 ma tempo dopo mezzanotte ('00:00:00') non corrisponderà alla condizione. Se vuoi anche quelle file, usa endDate < '2012-02-26' invece.

Potresti usare DATE(endDate) <= DATE('2012-02-25 00:00:00') o DATE(endDate) <= '2012-02-25' Ma queste condizioni sono "non paragabili", quindi le tue domande non saranno in grado di utilizzare un indice su endDate.

C'è il costruito STR_TO_DATE funzione in mysql che prende la stessa maschera di formato di formato data.

start_date >= str_to_date('2012/02/22 00:00:00','%Y/%m/%d %h:%i:%s)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top