PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Erhalten Sie das gleiche Ergebnis, wenn Sie versuchen, andere Daten zu finden

Ihr Problem ist ein Mangel an Klammern:In SQL AND hat Vorrang vor OR , also müssen Sie Ihren gesamten vorherigen Ausdruck in Klammern setzen:

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

Ohne die Klammern erhalten Sie A or B or (C and D) , aber Sie möchten (A or B or C) and D