आपकी समस्या कोष्ठक की कमी है:SQL में AND
OR
. पर वरीयता लेता है , इसलिए आपको अपनी पूरी पिछली अभिव्यक्ति के चारों ओर कोष्ठक लगाने की आवश्यकता है:
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
कोष्ठक के बिना, आपको A or B or (C and D)
मिलता है , लेकिन आप (A or B or C) and D
. चाहते हैं