MySQL函数计算1小时平均浓度对应的IAQI

目录

目标

空气质量指数计算对照表

函数

调用测试


目标

        根据空气质量指数标准,通过调用MySQL函数来计算:二氧化硫(SO2)、二氧化氮(NO2)、一氧化碳(CO)、臭氧(O3)1小时平均浓度对应的IAQI


空气质量指数计算对照表


函数

DELIMITER $$

USE `数据库名称`$$

DROP FUNCTION IF EXISTS `IAQI_1H`$$

CREATE DEFINER=`登录账号`@`%` FUNCTION `IAQI_1H`(param_factor_type VARCHAR(10),param_factor_value DECIMAL(10,5)) RETURNS VARCHAR(1024) CHARSET utf8mb4
BEGIN
IF
param_factor_type IS NULL OR  LENGTH(REPLACE(param_factor_type,' ',''))=0
OR param_factor_value IS NULL OR param_factor_value IS NULL
THEN 
RETURN NULL;
END IF;
#二氧化硫(SO2),单位:μg/m³
IF
param_factor_type ="二氧化硫" OR LOWER(param_factor_type) ="so2"
THEN 
	IF
		param_factor_value BETWEEN 0 AND 150
	THEN
		RETURN CEILING((50-0)/(150-0)*(param_factor_value-0)+0);
	ELSEIF
		param_factor_value BETWEEN 150 AND 500
	THEN
		RETURN CEILING((100-50)/(500-150)*(param_factor_value-150)+50);
	ELSEIF
		param_factor_value BETWEEN 500 AND 650
	THEN
		RETURN CEILING((150-100)/(650-500)*(param_factor_value-500)+100);
	ELSEIF
		param_factor_value BETWEEN 650 AND 800
	THEN
		RETURN CEILING((200-150)/(800-650)*(param_factor_value-650)+150);
	ELSE
		#SO2高于800,1h平均浓度按照24小时平均浓度计算的分指数报告。
		RETURN NULL;	
	END IF;
		
END IF;

#二氧化氮(NO2),单位:μg/m³
IF
param_factor_type ="二氧化氮" OR LOWER(param_factor_type) ="no2"
THEN 
	IF
		param_factor_value BETWEEN 0 AND 100
	THEN
		RETURN CEILING((50-0)/(100-0)*(param_factor_value-0)+0);
	ELSEIF
		param_factor_value BETWEEN 100 AND 200
	THEN
		RETURN CEILING((100-50)/(200-100)*(param_factor_value-100)+50);
	ELSEIF
		param_factor_value BETWEEN 200 AND 700
	THEN
		RETURN CEILING((150-100)/(700-200)*(param_factor_value-200)+100);
	ELSEIF
		param_factor_value BETWEEN 700 AND 1200
	THEN
		RETURN CEILING((200-150)/(1200-700)*(param_factor_value-700)+150);
	ELSEIF
		param_factor_value BETWEEN 1200 AND 2340
	THEN
		RETURN CEILING((300-200)/(2340-1200)*(param_factor_value-1200)+150);	
	ELSEIF
		param_factor_value BETWEEN 2340 AND 3090
	THEN
		RETURN CEILING((400-300)/(3090-2340)*(param_factor_value-2340)+150);
	ELSEIF
		param_factor_value BETWEEN 3090 AND 3840
	THEN
		RETURN CEILING((500-400)/(3840-3090)*(param_factor_value-3090)+150);
	ELSE
		RETURN NULL;
	END IF;
		
END IF;


#一氧化碳(CO),单位:mg/m³
IF
param_factor_type ="一氧化碳" OR LOWER(param_factor_type) ="co"
THEN 
	IF
		param_factor_value BETWEEN 0 AND 5
	THEN
		RETURN CEILING((50-0)/(5-0)*(param_factor_value-0)+0);
	ELSEIF
		param_factor_value BETWEEN 5 AND 10
	THEN
		RETURN CEILING((100-50)/(10-5)*(param_factor_value-5)+50);
	ELSEIF
		param_factor_value BETWEEN 10 AND 35
	THEN
		RETURN CEILING((150-100)/(35-10)*(param_factor_value-10)+100);
	ELSEIF
		param_factor_value BETWEEN 35 AND 60
	THEN
		RETURN CEILING((200-150)/(60-35)*(param_factor_value-35)+150);
	ELSEIF
		param_factor_value BETWEEN 60 AND 90
	THEN
		RETURN CEILING((300-200)/(90-60)*(param_factor_value-60)+150);	
	ELSEIF
		param_factor_value BETWEEN 90 AND 120
	THEN
		RETURN CEILING((400-300)/(120-90)*(param_factor_value-90)+150);
	ELSEIF
		param_factor_value BETWEEN 120 AND 150
	THEN
		RETURN CEILING((500-400)/(150-120)*(param_factor_value-120)+150);
	ELSE
		RETURN NULL;
	END IF;	
END IF;

#臭氧(O3),单位:μg/m³
IF
param_factor_type ="臭氧" OR LOWER(param_factor_type) ="o3"
THEN 
	IF
		param_factor_value BETWEEN 0 AND 160
	THEN
		RETURN CEILING((50-0)/(160-0)*(param_factor_value-0)+0);
	ELSEIF
		param_factor_value BETWEEN 160 AND 200
	THEN
		RETURN CEILING((100-50)/(200-160)*(param_factor_value-160)+50);
	ELSEIF
		param_factor_value BETWEEN 200 AND 300
	THEN
		RETURN CEILING((150-100)/(300-200)*(param_factor_value-200)+100);
	ELSEIF
		param_factor_value BETWEEN 300 AND 400
	THEN
		RETURN CEILING((200-150)/(400-300)*(param_factor_value-300)+150);
	ELSEIF
		param_factor_value BETWEEN 400 AND 800
	THEN
		RETURN CEILING((300-200)/(800-400)*(param_factor_value-400)+150);	
	ELSEIF
		param_factor_value BETWEEN 800 AND 1000
	THEN
		RETURN CEILING((400-300)/(1000-800)*(param_factor_value-800)+150);
	ELSEIF
		param_factor_value BETWEEN 1000 AND 1200
	THEN
		RETURN CEILING((500-400)/(1200-1000)*(param_factor_value-1000)+150);
	ELSE
		RETURN NULL;
	END IF;
END IF;

    END$$

DELIMITER ;

调用测试

#o3iaqi=36
SELECT `IAQI_1H`('o3',114.00) o3iaqi
#so2iaqi=173
SELECT `IAQI_1H`('so2',718.92) so2iaqi
#no2iaqi=93
SELECT `IAQI_1H`('no2',186.00) no2iaqi
#coiaqi=26
SELECT `IAQI_1H`('co',2.600) coiaqi


版权声明:本文为qq_39706570原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。