sql >> Database teknologi >  >> RDS >> PostgreSQL

Få det samme resultat tilbage, når du prøver at finde forskellige data

Dit problem er mangel på parenteser:I SQL AND har forrang over OR , så du skal sætte parenteser omkring hele dit tidligere udtryk:

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

Uden parenteserne får du A or B or (C and D) , men du vil have (A or B or C) and D




  1. Hvad er fordelene ved at oprette Stored Procedures i SQL og MySQL?

  2. Oracle:Få data om alle måneder, 0 hvis ingen data

  3. Er det bedre at filtrere et resultatsæt ved hjælp af en WHERE-klausul eller ved at bruge applikationskode?

  4. Sammenføj to tabeller, hvor tabel A har en datoværdi og skal finde den næste dato i B under datoen i A