Salut a tous,
oracle 11g sous linux
Soit une table TEST avec un champ fecha(date) de type NUMBER
Dans le champs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SQL> select fecha "date" from test; date ---------- 1,0819E+12
Ce que je voudrais c'est faire une select et dortir la date qui corespond.
J'ai Googeler un peu et j'ai trouvé la fonction suivante:
Function created.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 SQL> CREATE OR REPLACE 2 FUNCTION unixts_to_date(unixts IN PLS_INTEGER) RETURN DATE IS 3 /** 4 * Converts a UNIX timestamp into an Oracle DATE 5 */ 6 unix_epoch DATE := TO_DATE('19700101000000','YYYYMMDDHH24MISS'); 7 max_ts PLS_INTEGER := 2145916799; -- 2938-12-31 23:59:59 8 min_ts PLS_INTEGER := -2114380800; -- 1903-01-01 00:00:00 9 oracle_date DATE; 10 11 BEGIN 12 13 IF unixts> max_ts THEN 14 RAISE_APPLICATION_ERROR( 15 -20901, 16 'UNIX timestamp too large for 32 bit limit' 17 ); 18 ELSIF unixts <min_ts THEN 19 RAISE_APPLICATION_ERROR( 20 -20901, 21 'UNIX timestamp too small for 32 bit limit' ); 22 ELSE 23 oracle_date := unix_epoch + NUMTODSINTERVAL(unixts, 'SECOND'); 24 END IF; 25 26 RETURN (oracle_date); 27 28 END; 29 /
Mais...ça donne l'erreur que vous pouvez voir:
Ça serait plus facil avec un champ de type timestamp mais la base n'a pas ete faite comme ça. Existe t'il une solution?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SQL> select unixts_to_date(1081936800000) from dual; select unixts_to_date(1081936800000) from dual * ERROR at line 1: ORA-20901: UNIX timestamp too large for 32 bit limit ORA-06512: en "EXPLO.UNIXTS_TO_DATE", linea 13
D'avance merci
Partager