Estava eu trabalhando com a seguinte situação: precisava que um dado filtrasse por um campo data comparado com outros dois campos data. No clássico SQL ficaria algo assim:
WHERE campo1 BETWEEN campo2 AND campo3
Só que o campo3 tem um detalhe, ele é nulo se não tem uma data definida, o que significaria no contexto, uma data futura indefinida. Como tratar isso?
Temos duas funções que faz a mesma coisa, o COALESCE e NVL, ele avalia o primeiro parâmetro, se for nulo, passa para o próximo. Exemplo:
WHERE campo1 BETWEEN campo2 AND COALESCE(campo3, SYSDATE)
WHERE campo1 BETWEEN campo2 AND NVL(campo3, SYSDATE)
Existe alguma diferença entre as duas? Sim, COALESCE permite mais de dois parâmetros, então, vamos supor que tenha um campo4, faríamos:
WHERE campo1 BETWEEN campo2 AND COALESCE(campo3, campo4, SYSDATE)
Neste último, se campo3 é nulo, é verificado o campo4, e se for também nulo, irá para SYSDATE. E se quisermos colocarmos um campo5, campo6, campo7, ..., campoN, podemos.
Já o NVL tem uma outra função chamado NVL2 que realiza a mesma função, mas para 3 parâmetros.
WHERE campo1 BETWEEN campo2 AND NVL2(campo3, campo4, SYSDATE)
E é isso por hoje.
Nenhum comentário:
Postar um comentário