Por mais que você não coloque a mão na massa, tem horas que isso é inevitável. Estes dias tive que construir uma view bem atípica e estas funções SQL foram fundamentais para o sucesso da minha view. Vale a pena conhecê-las:
- SUBSTR : Esta função retorna uma parte de uma string. Exemplo: SUBSTR(LINHA, 2,8) retorna uma string de 8 posições a partir da posição 2 de LINHA.
- CONCAT : Usando esta função, você consegue juntar(concatenar) duas strings. Exemplo CONCAT(LINHA1, LINHA2) irá retornar uma string formada pela string LINHA1 + LINHA2.
- REPLACE : Esta função substitui um grupo de caracteres por outro dentro de uma string. Exemplo: REPLACE(LINHA1, ‘abc’, ‘bcd’) irá substituir em LINHA1 o grupo de caracteres ‘abc’ por ‘bcd’.
- TRIM : Com esta função, você elimina todos os espaços em branco no início e no fim de uma string. Importante: Espaços no meio da string não serão afetados. Exemplo: TRIM(‘ Esta frase contém espaços ‘) irá retornar ‘Esta frase contém espaços’.
- TO_DATE : Converte uma string em uma data. Também recebe como argumento o formato que você quer para sua data. Exemplo: TO_DATE(‘20110922’, ‘DDMMYYYY’ ) retorna 22/09/2007.
- TO_NUMBER : Converte uma string em um número. Também aceita como argumento o formato que você quer para o seu número. Exemplo: TO_NUMBER(‘1210.73’, ‘9999.99’) retorna 1210.73.
Dicas:
- Quando você for converter uma string para número, aconselho a utilizar a função TRIM antes. Isso evita que você tenha o erro “Invalid format number” que eu tive várias vezes antes de descobrir que a causa eram os espaços. Então fica assim TO_NUMBER(TRIM(LINHA1), ‘9999.99’).
- O marcador decimal oficial do oracle é ponto( ‘.’) e não vírgula(‘,’). Isso pode causar problemas na conversão da string ‘56,89’ em número utilizando a função TO_NUMBER. Eu recomendo que você use a função replace para substituir vírgula(‘,’) por ponto( ‘.’) e depois converter sua string em número. Então fica assim TO_NUMBER(REPLACE(LINHA1, ‘,’,’.’), ‘9999.99’)
Tem outra campeã… WM_CONCAT() ou LISTAGG(). A wm_concat funciona bem até o 9, do 10 em diante melhor usar a listagg…