PDA

View Full Version : [Oracle] Passaggio da ora legale a ora solare


sottovento
05-11-2018, 15:54
Ciao
l'impianto era in produzione quando c'e' stato il passaggio da ora legale a ora solare. I dati di produzione sono stati salvati in un database Oracle.
Ci sono ovviamente dei prodotti che hanno delle date "inconsistenti", nel senso che la fine della produzione e' avvenuta prima dell'inizio della stessa (nell'ora locale di Memphis, TN).

Pensavo che si potesse ovviare al problema estraendo le date in formato GMT.
Pero' se eseguo

SELECT
TO_CHAR(TIME_ENTERED_FM AT TIME ZONE 'UTC', 'YYYY-MM-DD HH24:MI:SS'),
FROM
PRODUCTION_STATUS
WHERE
ID_PRODUCT='xxxx-xxx-xxxx-xxx';

ottengo comunque che la data di fine produzione e' antecedente alla data di inizio. La stessa cosa se sostituisco 'GMT' a 'UTC'.
Pensavo che questo non avrebbe dovuto succedere!

Qualche idea?

wingman87
06-11-2018, 20:28
La data come è stata inserita?

Edit: e di che tipo è la colonna SQL?

sottovento
07-11-2018, 03:57
La maggior parte delle colonne sono TIMESTAMP (senza timezone, immagino).
I dati sono inseriti da diverse applicazioni, alcune Java (accesso via jdbc), alcune C# (accesso via Entity Framework + Devart)

wingman87
07-11-2018, 22:34
Provo a ragionare: se la colonna è di tipo timestamp senza time zone deve essere chi inserisce il dato a tenerne conto usando un'istruzione tale che il timestamp inserito sia universale (utc) e non "sfasato" dal fuso. Se così non è stato fatto si può verificare la fattibilità di correggere il dato (e andrebbe corretta anche la procedura di inserimento).
La prima idea che mi viene in mente è: se le righe sono frutto di insert (non di update) c'è qualche colonna identity nella tabella con cui poter ordinare le righe in ordine di inserimento? Se sì puoi scorrere le righe fino a quando il timestamp non "torna indietro" e iniziare a correggere da lì.

Spero possa essere di qualche aiuto.

Inviato dal mio F5121 utilizzando Tapatalk

sottovento
08-11-2018, 23:31
Purtroppo i record vengono aggiornati continuamente. Magari se sono fortunato riesco a trovare una tabella nella quale si fanno solo INSERT...

Certo, la soluzione migliore sarebbe poter estrarre il campo "Daylight Savings Time" dal timestamp ed ordinare in base a quello. Non so se si puo' fare....

Nel caso non si possa, credo che il problema non sia risolvibile, per ora. Ovviamente se davvero e' cosi', dovro' memorizzare anche l'informazione "Ora solare/legale" in una nuova colonna del database...