Convertire una data CYYMMDD in SQL

Accedi per salvare

I campi data numerici a sette cifre — 1260727 per il 27 luglio 2026 — si convertono senza scomporre nulla, sfruttando il fatto che il "secolo" vale 0 per il Novecento e 1 dal Duemila.

SELECT DATE(TIMESTAMP_FORMAT(DIGITS(DEC(DTACYY + 19000000, 8, 0)), 'YYYYMMDD'))
  FROM PRODLIB/ORDINI

Sommando 19000000 il numero diventa già la data in formato YYYYMMDD: 1260727 diventa 20260727, e 0991231 diventa 19991231.

Per proteggersi dalle date a zero, che in questi campi sono la norma quando il valore non è ancora stato impostato:

SELECT CASE WHEN DTACYY = 0 THEN NULL
            ELSE DATE(TIMESTAMP_FORMAT(DIGITS(DEC(DTACYY + 19000000, 8, 0)), 'YYYYMMDD'))
       END AS DATA_ORDINE
  FROM PRODLIB/ORDINI

Attenzione

senza il controllo sullo zero la conversione fallisce e la query si ferma sull'intero risultato, non sulla singola riga. È il motivo per cui una query che funzionava smette di funzionare il giorno in cui entra il primo record senza data.

Nota

la stessa espressione non vale per i campi a sei cifre YYMMDD, che non hanno il secolo: lì quale secolo intendere è una decisione dell'applicazione, non del database.


Rilasci. TIMESTAMP_FORMAT, DIGITS e DEC sono funzioni SQL standard, presenti su tutti i rilasci supportati. Questa ricetta non ha prerequisiti.

← Torna al blog

Commenti

Nessun commento ancora. Sii il primo a commentare!

Devi avere un account per commentare. Accedi · Registrati