sql >> Database teknologi >  >> RDS >> Oracle

Oracle Vælg Where Date Between Today

Forudsat date_enter er en DATE felt:

Select * From Customer_Rooms CuRo
   Where CuRo.Date_Enter >= trunc(sysdate)
   And CuRo.Date_Enter < trunc(sysdate) + 1;

trunc() funktion fjerner tidsdelen som standard, så trunc(sysdate) giver dig midnat i morges.

Hvis du især vil holde dig til between , og du har en DATE ikke en TIMESTAMP , du kunne gøre:

Select * From Customer_Rooms CuRo
   Where CuRo.Date_Enter between trunc(sysdate)
      And trunc(sysdate) + interval '1' day - interval '1' second;

between er inklusiv, så hvis du ikke tager et sekund fri, vil du potentielt hente plader fra præcis midnat i aften; så dette genererer den 23:59:59-tid, du ledte efter i din oprindelige forespørgsel. Men ved at bruge >= og < er lidt klarere og mere eksplicit, efter min mening i hvert fald.

Hvis du er sikker på, at du alligevel ikke kan have datoer senere end i dag, tilføjer den øvre grænse ikke rigtig noget, og du vil få det samme resultat med blot:

Select * From Customer_Rooms CuRo
   Where CuRo.Date_Enter >= trunc(sysdate);

Du ønsker ikke at bruge trunc eller to_chardate_enter kolonne dog; brug af en funktion forhindrer et indeks på den kolonne i at blive brugt, hvilket er grunden til din forespørgsel med to_char var for langsom.



  1. Kan ikke installere plpython3u - postgresql

  2. Hvordan kan jeg overføre en række værdier til min lagrede procedure?

  3. Null Pointer Undtagelse ved kald af getReadableDatabase()

  4. Fuldtekstsøgning på mysql med et ord på 3 bogstaver