Esiste una funzione incorporata in Oracle che restituirà la data più alta possibile che può essere inserita in un campo data?Come si ottiene la massima data possibile in Oracle?
risposta
SELECT TO_DATE('31.12.9999 23:59:59', 'dd.mm.yyyy hh24:mi:ss')
FROM dual
Si noti che la data minima è molto più semplice:
SELECT TO_DATE(1, 'J')
FROM dual
Penso che per gli scopi della maggior parte delle persone 'TO_DATE ('9999','yyyy ')' sarebbe un'alternativa molto più breve e accettabile, specialmente quando si usa per coalesce nulli nei confronti. – Alex
@Alex: Sì, ma l'operatore ha chiesto "la data massima possibile". – Quassnoi
Lo so. Aggiungo solo i miei 2 centesimi nella speranza che aiuti qualcuno. – Alex
Non so di una funzione, ma secondo this article:
Oracle 7: dal 1 ° gennaio, 4712 aC al 31 dicembre 4712 d.C.
Oracle 8: dal 1 gennaio 4712 aC al 31 dicembre 9999 d.C.
Oracle 9: dal 1 gennaio 4712 aC al 31 dicembre 9999 d.C.
PL/SQL: dal 1 gennaio 4712 aC al 31 dicembre 9999 d.C.
Dalla documentazione 11g:
Oracle Database può memorizzare le date in epoca Julian, che vanno dal 1 ° gennaio 4712 aC fino al 31 dicembre 9999 CE (Common Era, o 'AD').
http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/datatype.htm#i1847
Altri modi, solo per divertimento:
SELECT to_date(5373484, 'J') + (1 - 1/24/60/60)
FROM dual;
SELECT date '9999-12-31' + (1 - 1/24/60/60)
FROM dual;
La prima query deve essere 'SELECT to_date (5373484, 'J') + (1 - 1/24/60/60) FROM dual;' –
In formato Giuliano (JDDD) la data massima di Oracle è 2086307365.
Perché? Se inizi a inserire valori fittizi di "data avanzata" in una tabella, può "confondere" l'ottimizzatore che presumerà di avere un intero intervallo di valori di date distribuiti negli anni successivi a 8000. –