#mysql
#mysql
Вопрос:
Прошу прощения, если это кажется очень расплывчатым, но я не уверен, как еще это сформулировать. Я разработал функцию, которая, если день либо суббота, либо воскресенье, предвосхищает или откладывает уплату налогов. Следующий код:
DELIMITER $
create function ajustavencimento (ano int, mes int, imposto char(6)) returns varchar(10)
begin
declare vencimento datetime;
declare dia int;
declare diaPIS int;
declare ajustePIS varchar(50);
if (mes = 12) then
begin
set mes = 1;
set ano = ano 1;
end; else
begin
set mes = mes 1;
end;
end if;
if (imposto = 'PIS') then
begin
select pisvencimento into diaPIs from pis;
select pisajuste into ajustePIS from pis;
set vencimento = cast(concat(cast(ano as char(4)),'-',cast(mes as char(2)),'-',cast(diaPIS as char(2))) as datetime);
set dia = date_format(vencimento,'%w');
if(dia = 0) then
begin
if (ajustePIS = 'Antecepiar') then
set vencimento = date_sub(vencimento, interval 2 day);
end if;
if (ajustePIS = 'Adiar') then
set vencimento = date_add(vencimento, interval 1 day);
end if;
end;
end if;
if(dia = 6) then
begin
if (ajustePIS = 'Antecepiar') then
set vencimento = date_sub(vencimento, interval 1 day);
end if;
if (ajustePIS = 'Adiar') then
set vencimento = date_add(vencimento, interval 2 day);
end if;
end;
end if;
end;
end if;
return date_format(vencimento,'%d/%m/%Y');
end
Функция всегда возвращает дату
25/02/2013 - OK
25/03/2013 - OK
25/04/2013 - OK
25/05/2013 - NOT (MUST RETURN 27/05/2013)
25/06/2013 - OK
Комментарии:
1. Каковы значения pisvencimento и pisajuste? например, что находится в pis? Можете ли вы добавить несколько комментариев на английском языке, объясняющих, что пытаются сделать различные части кода? Каковы значения всех параметров, с которыми вы вызываете функцию?
2. Вместо
date_format(vencimento, '%w')
вы можете использоватьdayofweek(vencimento)
. Просто помните, что он использует Sunday = 1, а не 0.3.
25/05/2013
сегодня суббота. Ваша функция настраивается только для воскресенья.4. @Dijkgraaf, pisvencimento = день месяца, выбранный для уплаты налога (25); ajustePIS = информация для отсрочки или авансового платежа («ожидает» или «отсрочка»). PIS = название налога в Бразилии.
5. проблема вполне может быть в таблице pis, несоответствие с pisvencimento и / или pisajuste; вы проверили, что строка за май / 2013 верна в этой таблице?