sql >> Databasteknik >  >> RDS >> Oracle

Hur man extraherar månadsnummer från datum i Oracle

Om värdet är ett tal eller en sträng kan du konvertera det till ett datum med en lämplig mask - vilket är vad du saknar och vad som orsakar felet du får (eftersom det använder din sessions NLS_DATE_FORMAT inställning, som uppenbarligen inte matchar dataformatet; men som du inte ska lita på ändå, som @MTO sa i kommentarerna):

to_date(ID_BB_SECURITY, 'YYYYMMDD')

och sedan extrahera månadsnumret från det:

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

Eller så kan du bara använda en delsträng:

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

De antar ett fast konsekvent format, vilket alltid är ett riskabelt antagande när man använder fel datatyp. Och om det är ett nummer gör de en implicit omvandling från nummer till sträng, som du kan förvandla till en explicit omvandling för större tydlighet.

Om det redan är ett datum - som det borde vara, naturligtvis - så behöver du inte konverteringen:

select extract(month from ID_BB_SECURITY) from BT_EXPORT


  1. Data från två tabeller i en vy

  2. MySQL tät rankning för varje grupp/partition

  3. Ladda upp bilder med hjälp av arrayer och hämta fel

  4. Java - Hämta data från MySQL-databas