sql >> Databasteknik >  >> RDS >> PostgreSQL

Få tillbaka samma resultat när du försöker hitta olika data

Ditt problem är bristen på parenteser:I SQL AND har företräde framför OR , så du måste sätta parenteser runt hela ditt tidigare uttryck:

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

Utan hakparenteser får du A or B or (C and D) , men du vill ha (A or B or C) and D




  1. Skillnad mellan databas och schema

  2. Bygga Android-app för att köra PHP och MySQL på Android-surfplatta

  3. mysqli_connect():(HY000/2002):Anslutningen tog timeout på hosting

  4. SQL Server Index bakåtsökning:Förståelse, justering