Här försöker jag plocka fram de anställda som gått I pension före 50 men det fungerar inte hur jag än gör. Skall tilläggas att PE.Ar är sparat i Number medans P.Fodd ligger i Date. Jag tror att detta kan vara problemet men hur konverterar jag i så fall detta. I typ SQL server så kan man använda YEAR() för att få ut ett datums år. Hej. Kanon!SQL: funktioner och datakonvertering
Denna fråga skall rulla på en Oracle 9i om jag får till det.
Tacksam för idéer.
<code>, SELECT P.EfterNamn, (PE.Ar - P.Fodd) Pensionär
FROM Personal P INNER JOIN Pension PE
ON P.PersID = PE.PersID
WHERE (PE.Ar - P.Fodd) < 50;
</code>, Sv: SQL: funktioner och datakonvertering
Vet inte om det fungerar i oracle men testa
SELECT P.EfterNamn, (PE.Ar - P.Fodd) Pensionär
FROM Personal P INNER JOIN Pension PE
ON P.PersID = PE.PersID
WHERE (PE.Ar - Year(P.Fodd)) < 50;
- MSv: SQL: funktioner och datakonvertering
Kul att någon använder Oracle...
När du subtraherar/adderar ett tal med ett datum antar Oracle att det
är dagar du använder.
Så en ungefärlig beräkning skulle kunna vara P.fodd - ( PE.Ar * 365 ).
Två andra alternativ du kan labba med är :
1. Funktionen MONTHS_BETWEEN(date1, date2) return months
Exempel :
I exemplet antar jag att PE.Ar innehåller hela årtal
och att det går bra att pensionen skedde 1 januari ?
WHERE months_between( to_date(to_char(PE.Ar) || '-01-01','YYYY-MM-DD'), P.Fodd) <= 50 * 12
2. Funktionen ADD_MONTHS(date, months) return date
Exempel :
WHERE p.Fodd <= add_months(trunc(SYSDATE), (50 * 12) * -1)
Lycka till
/UffeSv: SQL: funktioner och datakonvertering
<CODE>
WHERE months_between( to_date(to_char(PE.Ar) || '-01-01','YYYY-MM-DD'), P.Fodd) <= 50 * 12
</CODE>
...fungerar perfekt för mig.
Tack för hjälpen/
Fredrik