Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle SQL сравнението на ДАТИ връща грешен резултат

Сравнявате два STRINGS . Трябва да сравните ДАТА с. Както вече казах в другия отговор тук, трябва да оставите датата такава, каквато е за изчисленията на ДАТА. TO_CHAR е за показване и TO_DATE е да конвертирате низов литерал в 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 е колона DATE, следователно ще има елемент datetime. Така че, ако искате да изключите елемента време, докато сравнявате, трябва да използвате TRUNC

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

Прилагайки обаче TRUNC в колоната за датаната ще потисне всеки нормален индекс на тази колона. От гледна точка на ефективността е по-добре да използвате условие за период от време .

Например,

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да внедрим този тригер на Oracle SQL?

  2. Как да получите низ след символен оракул

  3. Oracle - Импортиране на данни в таблица с различно име?

  4. SQL:Как да намеря дубликати въз основа на две полета?

  5. Преименувайте Oracle Table или View