Tópico 4 – Using Conversion Functions and Conditional Expressions

Subtópico 4.1 – Descrever as funções de conversão (Describe various types of conversion functions that are available in SQL)
Subtópico 4.2 – Usar as funções TO_CHAR, TO_DATE e TO_NUMBER (Use the TO_CHAR, TO_NUMBER, and TO_DATE conversion functions)
Subtópico 4.3 – Aplicar expressões condicionais em cláusulas SELECT (Apply conditional expressions in a SELECT statementstatements)

Neste 4º tópico, falarei um pouco sobre funções de conversão no Oracle. No Oracle, existem 2 tipos de conversões, as explícitas e as implicitas. As explícitas são alcançadas através do uso de funções de conversão, que veremos mais adiante. Já as implícitas são realizadas internamente pelo Oracle, o que não é recomendado, visto que isso pode degradar a performance durante a execução de cláusulas SQL. Lembrando que o sobre expressões condicionais foi abordado em tópicos anteriores, logo não será abordado neste.

As principais, e mais usadas funções de conversão do Oracle são as seguintes:

  • TO_CHAR
  • TO_DATE
  • TO_NUMBER
  • TO_TIMESTAMP
  • CAST

1) TO_CHAR

Função usada para conversões que resultarão em caracteres. Sua sintaxe é a seguinte:

TO_CHAR(N1, [FORMATO], [NLS_PARAM])

Onde: N1 pode ser um tipo numérico ou de data. Essa função converte N1 em um VARCHAR2. FORMATO indica a mascara de conversão, muito usado, por exemplo, para converter datas para strings. NLS_PARAM representa o parâmetro de banco NLS_DATE_LANGUAGE que define a linguagem e formato em que será exibida a data. Abaixo temos alguns exemplos:

 
 -- converte o numero para uma string
 SELECT TO_CHAR(123) FROM DUAL;

 -- converte o número para uma string, usando uma mascara 
 -- de formatação 
 -- G - separador de milha e D - decimal
 -- o comando abaixo resulta em: 122.374,00
 SELECT TO_CHAR(122374, '999G999D99') FROM DUAL;

 -- usando o NLS_PARAM
 SELECT TO_CHAR(SYSDATE, 
                'DD MONTH RRRR', 
                'NLS_DATE_LANGUAGE=SPANISH') FROM DUAL;

 -- dia (entre o 1 e 366 dias do ano)
 SELECT TO_CHAR(SYSDATE, 'DDD') FROM DUAL;

 -- obtem apenas a hora, minuto e segundo da data atual
 SELECT TO_CHAR(SYSDATE, 'HH24:MI:SS') FROM DUAL;

2) TO_DATE

Função usada para conversões que resultarão em datas. Sua sintaxe é:

TO_DATE(D1, [FORMATO], [NLS_PARAM])

Onde: D1 é uma string que será convertida para um tipo de dados DATE, usando o formato FORMATO. NLS_PARAM representa o parâmetro de banco NLS_DATE_LANGUAGE que define a linguagem e formato em que será exibida a data. Abaixo é possível ver alguns exemplos:

-- formata a data atual no padrão dia/mês/ano (4 dígitos)
 SELECT TO_DATE(SYSDATE, 'DD/MM/RRRR') FROM DUAL;

-- formata a data atual no padrão dia/mês/ano (4 dígitos) 
-- hora (formato 24 horas):minuto:segundo
 SELECT TO_DATE(SYSDATE, 'DD/MM/RRRR HH24:MI:SS') FROM DUAL;

-- formata a data atual no padrão dia/mês/ano (2 dígitos)
 SELECT TO_DATE(SYSDATE, 'DD/MM/YY') FROM DUAL;

É importante atentar para o uso do parâmetro NLS_DATE_FORMAT que define a mascara padrão de data/hora para o banco ou sessão. A seguir estou definindo a mascara apenas para a minha sessão:

 
 ALTER SESSION SET NLS_DATE_FORMAT='DD/MM/YYYY HH24:MI:SS';

3) TO_NUMBER

Função usada para conversões de dados do tipo CHAR/VARCHAR2 que resultarão em números (dados tipo NUMBER. Sua sintaxe é:

TO_NUMBER(E1, [FORMATO], [NLS_PARAM])

Onde: E1 é a string a ser convertida. FORMATO indica o formado do número e NLS_PARAM representa o parâmetro de banco NLS_DATE_LANGUAGE que define a linguagem e formato em que será exibida a data. Abaixo é possível ver alguns exemplos:

-- conversão simples. reparem que o número está emtre 
-- aspas, indicando ser uma string
 SELECT TO_NUMBER('123456') FROM DUAL

4) TO_TIMESTAMP

Função usada para converter e formatar determinada string para o tipo de dados TIMESTAMP. Lembrando que o tipo de dados TIMESTAMP difere do DATE apenas na exibição de milisegundos (até 9). Sua sintaxe é:

TO_TIMESTAMP(D1, [FORMATO], [NLS_PARAM])

Onde: D1 é a string a ser convertida. FORMATO é a mascara de formatação e NLS_PARAM representa o parâmetro de banco NLS_DATE_LANGUAGE que define a linguagem e formato em que será exibida a data. Abaixo é possível ver alguns exemplos:

-- FF indica os milisegundos
 SELECT TO_TIMESTAMP('01/11/2010 18:00:00:325463', 
                     'DD/MM/RRRR HH24:MI:SS:FF') FROM DUAL;

5) CAST

Função que realiza diversos tipos de conversões. Sua sintaxe é:

CAST(E1 AS D1)

Onde E1 é o dado a ser convertido e D1 é o tipo de dados resultante da conversão. Abaixo é possível ver alguns exemplos:

-- converte 100 (number) para um varchar2
SELECT CAST(100 AS VARCHAR2(3)) FROM DUAL;

-- converte 100 (varchar2) para um number
 SELECT CAST('100' AS NUMBER) FROM DUAL;

-- converte um date para o tipo timestamp, com precisão de 
-- 8 milisegundos
 SELECT CAST(SYSDATE AS TIMESTAMP(8)) FROM DUAL;

É isso por enquanto. Lembro-lhes que a prática levará a uma maior intimidade e consequentemente facilidade em trabalhar com essas funções, de forma bem mais complexa da que foi abordada nos exemplos acima. Até mais. Keep Querying.