sql >> Database >  >> RDS >> Oracle

Hoe het maandnummer uit de datum in Oracle te halen

Als de waarde een getal of tekenreeks is, kunt u deze converteren naar een datum met een geschikt masker - dat is wat u mist en wat de fout veroorzaakt die u krijgt (omdat het de NLS_DATE_FORMAT instelling, die blijkbaar niet overeenkomt met het formaat van de gegevens; maar waar je sowieso niet op moet vertrouwen, zoals @MTO zei in opmerkingen):

to_date(ID_BB_SECURITY, 'YYYYMMDD')

en dan het maandnummer extraheren daaruit:

select extract(month from to_date(ID_BB_SECURITY, 'YYYYMMDD')) from BT_EXPORT

Of je kunt gewoon een substring gebruiken:

select to_number(substr(ID_BB_SECURITY, 5, 2)) from BT_EXPORT;

Die gaan uit van een vast consistent formaat, wat altijd een riskante aanname is bij het gebruik van het verkeerde datatype. En als het een getal is, doen ze een impliciete conversie van getal naar tekenreeks, die je zou kunnen omzetten in een expliciete conversie voor meer duidelijkheid.

Als het al een datum is - zoals het natuurlijk zou moeten zijn - dan heb je de conversie niet nodig:

select extract(month from ID_BB_SECURITY) from BT_EXPORT


  1. Bij dubbele sleutelupdate hetzelfde als invoegen

  2. Sql-query om datetime in SQL Server in te voegen

  3. MySQL selecteer rijen waar de datum niet tussen de datum ligt

  4. Wijzig alle kolommen in een tabel in 'niet null', wat er ook gebeurt