Stai chiedendo le migliori pratiche. Penso che la seguente sia la migliore pratica:
"Date" >= DATE '2014-04-11' AND "Date" < DATE '2014-04-12' + 1
Per prima cosa, nota l'uso di DATE
parola chiave. La tua domanda riguarda le date eppure stai utilizzando un formato data che Oracle non supporta direttamente. Fortunatamente, Oracle supporta lo standard ANSI DATE
parola chiave con il formato standard ISO.
In secondo luogo, ho aggiunto un +1
quindi puoi vedere la fine del periodo di tempo, che è presumibilmente quello che vuoi vedere nel codice. Non dovrebbe influire sulle prestazioni perché + 1
è su una costante.
Terzo, una costante di data ha una componente temporale. Quando nessuno è specificato, è mezzanotte della data. Quindi, l'espressione:
"Date" BETWEEN '2014-04-11' AND '2014-04-12'
È davvero:
"Date" >= TIMESTAMP '2014-04-11 00:00:00' AND "Date" <= TIMESTAMP '2014-04-12 00:00:00'
Cioè, è inclusa esattamente un'ora dalla data successiva, il primo istante a mezzanotte. Di solito non è quello che vuoi. Oracle aggrava questo problema in due modi:
- La
date
il tipo di dati include una componente temporale. - Il modo predefinito di presentare
date
i valori non hanno componenti temporali.
Quindi, per essere più sicuri, usa le seguenti regole:
- Non utilizzare
between
nelle date. - Usa
>=
per il primo appuntamento. - Utente
<
per la seconda.
Aaron Bertrand ha un blog
proprio su questo argomento. Sebbene riguardi specificamente SQL Server, molte delle idee si applicano a Oracle, soprattutto perché la date
il tipo di dati in Oracle include i tempi.