sql >> Databáze >  >> RDS >> Oracle

Porovnání databází Oracle SQL vrací nesprávný výsledek

Porovnáváte dva STRINGS . Je třeba porovnat DATUM s. Jak jsem již řekl v jiné odpovědi zde, musíte datum ponechat tak, jak je to pro výpočty DATE. TO_CHAR je pro zobrazení a TO_DATE je převést řetězcový literál na DATE.

SELECT TO_CHAR(REPORTDATE, 'DD.MM.YYYY'),
  COUNT(*)
FROM TABLE
WHERE REPORTDATE > TO_DATE('09.11.2013', 'DD.MM.YYYY')
GROUP BY TO_CHAR(REPORTDATE, 'DD.MM.YYYY') 

REPORTDATE je také sloupec DATE, proto bude mít prvek datetime. Pokud tedy chcete při porovnávání vyloučit prvek času, musíte použít TRUNC

WHERE TRUNC(REPORTDATE) > TO_DATE('09.11.2013', 'DD.MM.YYYY')

Nicméně použití TRUNC v datovém sloupci potlačí jakýkoli běžný index na tom sloupci. Z hlediska výkonu je lepší použít podmínku časového období .

Například,

WHERE REPORTDATE
BETWEEN 
        TO_DATE('09.11.2013', 'DD.MM.YYYY')
AND     
        TO_DATE('09.11.2013', 'DD.MM.YYYY') +1


  1. CHYBA! Server skončil bez aktualizace souboru PID (/usr/local/var/mysql/`username`.lan.pid)

  2. Načtení nejběžnějších klíčových slov ze sloupce tsvector

  3. Pořadí provádění podmínek v MySQL

  4. Jaké účinky má použití binárního řazení?