Converter datas do Excel para Oracle
08/12/2009
MS Excel usa um formato de data chamado “Serial Date format” ao armazenar e lidar com datas e horas. A “Data serial” é calculada pegando o número de dias entre uma data qualquer e o dia 01/01/1900.
Por que isso é importante para um desenvoledor Oracle ? Se você está criando um documento em PL/SQL que será aberto no Excel, a data ficará incorreta a não ser que você converta antes para o padrão do Excel.
Felizmente, a formula de conversão de datas é muito simples. A seguinte função fará a conversão de uma data no Oracle para o padrão do Excel:
CREATE OR REPLACE FUNCTION convertOracleToSerialDate(p_date DATE) RETURN NUMBER IS BEGIN RETURN (p_date – TO_DATE(’01-JAN-1900?))+2; END; /
Veja:
SQL*Plus: Release 10.2.0.4.0 – Production on Mon Nov 23 22:31:54 2009 Copyright (c) 1982, 2007, Oracle. All Rights Reserved. Connected to: Oracle Database 10g Express Edition Release 10.2.0.1.0 – Production SQL> select convertOracleToSerialDate(’05-MAY-1968?) from dual; CONVERTORACLETOSERIALDATE(’05-MAY-1968?) —————————————- 24963
Se passarmos o valor “05-MAY-1968″ para a função acima, teremos como resopsta 24963. Agora, se colocarmos esse valor numa planilha excel e mudar o tipo da celula para DATA, teremos esse número convertido para “05/05/1968″, ou qualquer outro formato que você escolher.
O reverso também é possível. Caso desejamos converter do formato excel para oracle, usamos essa simples função:
CREATE OR REPLACE FUNCTION convertSerialToOracleDate(p_serial_date NUMBER) RETURN DATE IS BEGIN RETURN (TO_DATE(’01-JAN-1900?) + p_serial_date)-2; END; /
Exemplo:
SQL*Plus: Release 10.2.0.4.0 – Production on Mon Nov 23 22:45:44 2009 Copyright (c) 1982, 2007, Oracle. All Rights Reserved. Connected to: Oracle Database 10g Express Edition Release 10.2.0.1.0 – Production SQL> select convertSerialToOracleDate(24963) from dual; CONVERTSE ——— 05-MAY-68 SQL>
Agradecimentos a Jason Bennett pelas dicas acima.
