Meu ano fiscal começa em 1º de outubro (2017) e termina em 30 de setembro (2018)
Eu quero escrever uma função que irá calcular dinamicamente primeiro dia de outubro.
Atualmente tenho:
select Add_Months(Trunc(Add_Months(sysdate,3),'YYYY'), -3) from dual
pragma_udf
é opcional, é um recurso 12c que aumenta um pouco o desempenho de tais funções definidas pelo usuário quando usadas em SQL simples (mas pode degradar em PL/SQL).Muitas maneiras de fazer isso. Mas aqui vai um:
Só precisa de um
TO_DATE()
.Link do violino .
Se você precisar de uma função mais dinâmica que não exija que você escreva lógica para cada ano, você pode usar esta instrução CASE WHEN abaixo que funcionará para qualquer ano dado um conjunto FY (neste 1º de outubro é o início do FY ). Essencialmente, lê o mês do campo de data e, se for de janeiro a setembro, extrai o ano como está do campo de data e cria uma nova variável FY. Se o mês for de outubro a dezembro, ele pega o ano e adiciona 1 a ele. Obviamente, essa lógica pode ser ajustada para a definição de negócios de organizações específicas de como elas definem o FY, mas espero que você possa entender a lógica.