PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Uzyskaj ten sam wynik, gdy próbujesz znaleźć inne dane

Twoim problemem jest brak nawiasów:w SQL AND ma pierwszeństwo przed OR , więc musisz umieścić nawiasy wokół całego poprzedniego wyrażenia:

SELECT * FROM dim_date
WHERE ( -- added bracket
 EXTRACT (MONTH FROM date_cal) BETWEEN 3 AND 5
 OR (EXTRACT (MONTH FROM date_cal) = 2 AND EXTRACT (DAY FROM date_cal) >= 15)
 OR (EXTRACT (MONTH FROM date_cal) = 6 AND EXTRACT (DAY FROM date_cal) <= 21)
 ) -- added bracket
AND EXTRACT (YEAR FROM date_cal) BETWEEN 2010 AND 2012

Bez nawiasów otrzymasz A or B or (C and D) , ale chcesz (A or B or C) and D




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Upuścić i poprawnie utworzyć ENUM z sekwencjonowaniem?

  2. Czy jest to obowiązkowy parametr recovery_target_timeline='latest' w przełączaniu i przełączaniu z powrotem w PostgreSQL 9.4.1?

  3. dołącz do dwóch różnych tabel i usuń zduplikowane wpisy

  4. Funkcja Postgres do weryfikacji adresu e-mail

  5. Jak poprawnie zrobić upsert w postgresie 9.5