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.
Commenti
Nessun commento ancora. Sii il primo a commentare!
Devi avere un account per commentare. Accedi · Registrati