2021年Mysql個稅計算公式,自定義函數


1、目的

根據最新的新個稅計算,自定義mysql函數,實現根據傳入參數計算出當月應繳的稅額。

2、代碼

CREATE DEFINER=`root`@`%` FUNCTION `TaxFunc`( 
	-- 應發工資
	salary decimal(14,4), 
	-- 起征稅額
	base decimal(14,4), 	 
	-- 保險
	insurance DECIMAL(14,4), 
	-- 公積金  
	housing_fund DECIMAL(14,4), 
	-- 專項扣除
	special_item DECIMAL(14,4), 
	-- 月份
	mon int) RETURNS decimal(14,4)
BEGIN
	DECLARE Jan DECIMAL(14,4);
	DECLARE Feb DECIMAL(14,4);
	DECLARE Mar DECIMAL(14,4);
	DECLARE Apr DECIMAL(14,4);
	DECLARE May DECIMAL(14,4);
	DECLARE Jun DECIMAL(14,4);
	DECLARE Jul DECIMAL(14,4);
	DECLARE Aug DECIMAL(14,4);
	DECLARE Sep DECIMAL(14,4);
	DECLARE Oct DECIMAL(14,4);
	DECLARE Nov DECIMAL(14,4);
	DECLARE Dece DECIMAL(14,4);
	DECLARE income DECIMAL(14,4);
	
	-- 1月
	-- 所得額 = (工資 - 起征稅額 - 社保 - 公積金 - 專項扣除)* 月份
	set income = (salary-base-insurance-housing_fund-special_item) * 1;
	set Jan = IF(income <= 36000,income*0.03,IF(income <=144000,income*0.1-2520,IF(income<=300000,income*0.2-16920,IF(income<=420000,income*0.25-31920,IF(income<=660000,income*0.3-52920,IF(income<=960000,income*0.35-85920,income*0.45-181920))))));
	set Jan = IF(salary <= base, 0, Jan);

	-- 2月
	set income = (salary-base-insurance-housing_fund-special_item) * 2;
	set Feb = IF(income <= 36000,income*0.03,IF(income <=144000,income*0.1-2520,IF(income<=300000,income*0.2-16920,IF(income<=420000,income*0.25-31920,IF(income<=660000,income*0.3-52920,IF(income<=960000,income*0.35-85920,income*0.45-181920)))))) - Jan;
	set Feb = IF(salary <= base, 0, Feb);
	
	-- 3月
	set income = (salary-base-insurance-housing_fund-special_item) * 3;
	set Mar = IF(income <= 36000,income*0.03,IF(income <=144000,income*0.1-2520,IF(income<=300000,income*0.2-16920,IF(income<=420000,income*0.25-31920,IF(income<=660000,income*0.3-52920,IF(income<=960000,income*0.35-85920,income*0.45-181920)))))) - Jan - Feb;
	set Mar = IF(salary <= base, 0, Mar);
	
	-- 4月
	set income = (salary-base-insurance-housing_fund-special_item) * 4;
	set Apr = IF(income <= 36000,income*0.03,IF(income <=144000,income*0.1-2520,IF(income<=300000,income*0.2-16920,IF(income<=420000,income*0.25-31920,IF(income<=660000,income*0.3-52920,IF(income<=960000,income*0.35-85920,income*0.45-181920)))))) - Jan - Feb - Mar;
	set Apr = IF(salary <= base, 0, Apr);
	
	-- 5月
	set income = (salary-base-insurance-housing_fund-special_item) * 5;
	set May = IF(income <= 36000,income*0.03,IF(income <=144000,income*0.1-2520,IF(income<=300000,income*0.2-16920,IF(income<=420000,income*0.25-31920,IF(income<=660000,income*0.3-52920,IF(income<=960000,income*0.35-85920,income*0.45-181920)))))) - Jan - Feb - Mar - Apr;
	set May = IF(salary <= base, 0, May);
	
	-- 6月
	set income = (salary-base-insurance-housing_fund-special_item) * 6;
	set Jun = IF(income <= 36000,income*0.03,IF(income <=144000,income*0.1-2520,IF(income<=300000,income*0.2-16920,IF(income<=420000,income*0.25-31920,IF(income<=660000,income*0.3-52920,IF(income<=960000,income*0.35-85920,income*0.45-181920)))))) - Jan - Feb - Mar - Apr - May;
	set Jun = IF(salary <= base, 0, Jun);
	
	-- 7月
	set income = (salary-base-insurance-housing_fund-special_item) * 7;
	set Jul = IF(income <= 36000,income*0.03,IF(income <=144000,income*0.1-2520,IF(income<=300000,income*0.2-16920,IF(income<=420000,income*0.25-31920,IF(income<=660000,income*0.3-52920,IF(income<=960000,income*0.35-85920,income*0.45-181920)))))) - Jan - Feb - Mar - Apr - May - Jun;
	set Jul = IF(salary <= base, 0, Jul);
	
	-- 8月
	set income = (salary-base-insurance-housing_fund-special_item) * 8;
	set Aug = IF(income <= 36000,income*0.03,IF(income <=144000,income*0.1-2520,IF(income<=300000,income*0.2-16920,IF(income<=420000,income*0.25-31920,IF(income<=660000,income*0.3-52920,IF(income<=960000,income*0.35-85920,income*0.45-181920)))))) - Jan - Feb - Mar - Apr - May - Jun - Jul;
	set Aug = IF(salary <= base, 0, Aug);
	
	-- 9月
	set income = (salary-base-insurance-housing_fund-special_item) * 9;
	set Sep = IF(income <= 36000,income*0.03,IF(income <=144000,income*0.1-2520,IF(income<=300000,income*0.2-16920,IF(income<=420000,income*0.25-31920,IF(income<=660000,income*0.3-52920,IF(income<=960000,income*0.35-85920,income*0.45-181920)))))) - Jan - Feb - Mar - Apr - May - Jun - Jul - Aug;
	set Sep = IF(salary <= base, 0, Sep);
	
	-- 10月
	set income = (salary-base-insurance-housing_fund-special_item) * 10;
	set Oct = IF(income <= 36000,income*0.03,IF(income <=144000,income*0.1-2520,IF(income<=300000,income*0.2-16920,IF(income<=420000,income*0.25-31920,IF(income<=660000,income*0.3-52920,IF(income<=960000,income*0.35-85920,income*0.45-181920)))))) - Jan - Feb - Mar - Apr - May - Jun - Jul - Aug - Sep;
	set Oct = IF(salary <= base, 0, Oct);
	
	-- 11月
	set income = (salary-base-insurance-housing_fund-special_item) * 11;
	set Nov = IF(income <= 36000,income*0.03,IF(income <=144000,income*0.1-2520,IF(income<=300000,income*0.2-16920,IF(income<=420000,income*0.25-31920,IF(income<=660000,income*0.3-52920,IF(income<=960000,income*0.35-85920,income*0.45-181920)))))) - Jan - Feb - Mar - Apr - May - Jun - Jul - Aug - Sep - Oct;
	set Nov = IF(salary <= base, 0, Nov);
	
	-- 12月
	set income = (salary-base-insurance-housing_fund-special_item) * 12;
	set Dece = IF(income <= 36000,income*0.03,IF(income <=144000,income*0.1-2520,IF(income<=300000,income*0.2-16920,IF(income<=420000,income*0.25-31920,IF(income<=660000,income*0.3-52920,IF(income<=960000,income*0.35-85920,income*0.45-181920)))))) - Jan - Feb - Mar - Apr - May - Jun - Jul - Aug - Sep - Oct - Nov;
	set Dece = IF(salary <= base, 0, Dece);
	
	
RETURN IF(mon = 1,Jan,IF(mon=2,Feb,IF(mon=3,Mar,IF(mon=4,Apr,IF(mon=5,May,IF(mon=6,Jun,IF(mon=7,Jul,IF(mon=8,Aug,IF(mon=9,Sep,IF(mon=10,Oct,IF(mon=11,Nov,Dece)))))))))));
END

3、測試

如果:一個員工每個月是32000元工資,保險扣3000元,公積金扣1500元,專項附加扣2200元。那么1月到4月的每個月應繳個稅金額:

SELECT
	TaxFunc ( 32000, 5000, 3000, 1500, 2200, 1 ) 一月,
	TaxFunc ( 32000, 5000, 3000, 1500, 2200, 2 ) 二月,
	TaxFunc ( 32000, 5000, 3000, 1500, 2200, 3 ) 三月,
	TaxFunc ( 32000, 5000, 3000, 1500, 2200, 4 ) 四月;

結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM