当前位置:网站首页>MySQL custom function instance

MySQL custom function instance

2022-06-26 00:45:00 Lin fanchen coding

About MySQL The basic content of function , There are a lot of information on the Internet , Just sort out some valuable sql example , In order to facilitate their own reading , See the example to know the content .

1. Find the distance between two points ?

DELIMITER //
CREATE FUNCTION distance_fn(x1 DOUBLE, y1 DOUBLE, x2 DOUBLE, y2 DOUBLE)
   RETURNS DOUBLE
   BEGIN
   SET @distance = sqrt(pow(x2-x1, 2) + pow(y2-y1, 2));
   RETURN @distance;
   END;
   // 
DELIMITER ;

2. Find the area and perimeter of a circle ?

DELIMITER //
CREATE FUNCTION circle_cal_fn(r DOUBLE) 
	RETURNS VARCHAR(50)
	BEGIN
		DECLARE result VARCHAR(50) DEFAULT '';
		DECLARE len DOUBLE;
		DECLARE area DOUBLE;
		SET len = 2 * pi() *r;
		SET area = pi() * pow(r, 2);
		SET len = round(len, 2);
		SET area = round(area, 2);
		SET result = concat('radius:', r, ' long:', len, ' area:', area);
		RETURN result;
	END;
//
DELIMITER ;

3. Grade according to the score ?

DELIMITER //
DROP FUNCTION IF EXISTS grade_switch;
CREATE FUNCTION grade_switch(score INT) 
RETURNS VARCHAR(30)
BEGIN
    DECLARE consult INT;
    DECLARE grade VARCHAR(30);
    IF(score >= 0) THEN
    SET consult = score div 10;
    CASE consult 
    WHEN 10 THEN
    SET grade = 'A';
	WHEN 9 THEN
	SET grade = 'A';
	WHEN 8 THEN
	SET grade = 'B';
	WHEN 7 THEN 
	SET grade = 'C';
	WHEN 6 THEN
	SET grade = 'D';
	WHEN 5 THEN
	SET grade = 'E';
	WHEN 4 THEN
	SET grade = 'E';
	WHEN 3 THEN
	SET grade = 'E';
	WHEN 2 THEN
	SET grade = 'E';
	WHEN 1 THEN
	SET grade = 'E';
	WHEN 0 THEN
	SET grade = 'E';
    ELSE 
    SET grade = 'score is error!';
    END CASE;
    ELSE
    SET grade = 'score is error!';
    END IF;
    RETURN grade;
END;
//
DELIMITER ;

4. Find the three digit number of daffodils ?

DELIMITER //
# Break down the bits of a number , ten , Hundred bit , Then judge whether it is daffodil number 
DROP FUNCTION IF EXISTS narcissus_number_fun//
CREATE FUNCTION narcissus_number_fun(num INT)
    RETURNS BOOL
    BEGIN
	DECLARE a INT;
	DECLARE b INT;
	DECLARE c INT;
	SET a = num div 100;
	SET b = num % 100 div 10;
	SET c = num % 100 % 10;
	IF(num = (pow(a,3) + pow(b,3) + pow(c,3))) THEN
	RETURN TRUE;
	ELSE RETURN FALSE;
	END IF;
    END;
    //
	
# obtain m~n Between the number of daffodils , And return a string such as :between 101 and 999 narcissus is:153, 370, 371, 407,
DROP FUNCTION IF EXISTS find_narcissus_number_fun//
CREATE FUNCTION find_narcissus_number_fun(m INT, n INT) 
RETURNS VARCHAR(100) 
BEGIN 
	DECLARE result VARCHAR(100) DEFAULT '';
    DECLARE a INT;
    DECLARE b INT;
    DECLARE c INT;
    DECLARE num INT DEFAULT 0;
    IF(m <= n && m >= 100 && m <= 999) THEN
    SET result = concat('between ', m, ' and ', n, ' narcissus is:');
    narcissus_number:LOOP
    IF(narcissus_number_fun(m)) THEN
    SET num = num + 1;
    SET result = concat(result, m, ', ');
    END IF;
    SET m = m +1;
    IF(m > n) THEN LEAVE narcissus_number;
    END IF;
    END LOOP narcissus_number;
    IF(num=0) THEN SET result = concat(result, 'not find'); 
    END IF;
    ELSE
    SET result = 'invalid data';
    END IF;
    RETURN result;
END;
//
DELIMITER ;

5. Find out 2-n All the prime Numbers between ?

DELIMITER //
# Judge whether it is a prime number 
CREATE FUNCTION judge_prime(num INT) RETURNS BOOL
    BEGIN
    DECLARE i INT DEFAULT 2;
    DECLARE flag INT DEFAULT 0;
    prime:WHILE i <= floor(sqrt(num)) DO 
    IF(num % i = 0) THEN
    RETURN FALSE;
    END IF;
    SET i = i + 1;
    END WHILE prime;
    RETURN TRUE;
    END;
    //

# Upper limit of given interval n, Find out 2-n	 All the prime Numbers between , And return the result 
CREATE FUNCTION find_prime_fun(n INT) RETURNS VARCHAR(100)
    BEGIN
    DECLARE result VARCHAR(100) DEFAULT '';
    DECLARE m INT DEFAULT 2;
    IF(n >= 2) THEN 
    SET result = concat('between ', 2, ' and ', n, ' prime is: ');
    prime:WHILE m <= n DO
    IF(judge_prime(m)) THEN
    SET result = concat(result, m, ', ');
    
    END IF;
    SET m = m+1;
    END WHILE prime;
    ELSE
    SET result = 'invalid data!';
    END IF;
    RETURN result;
    END;
    //
DELIMITER ;	

6.1. seek s=a+aa+aaa+...+aa...a It's worth , among a It's a number , The last addend has n individual a. for example :2+22+222+2222+22222, here n=5.a And n Input by keyboard ?

DELIMITER //
# The number of each bit is the same and the bits m, altogether n position , Sum up 
CREATE FUNCTION get_plug_fun(m INT, n INT) RETURNS INT
    BEGIN
    DECLARE i INT DEFAULT 0;
    DECLARE result INT DEFAULT 0;
    plug: WHILE(i < n) DO
    SET result = result + pow(10, i)*m;
    SET i = i + 1;
    END WHILE plug;
    RETURN result;
    END;
    //
	
	
CREATE FUNCTION get_accumulate_fun(m INT, n INT) RETURNS INT
    BEGIN 
    DECLARE i INT DEFAULT 1;
    DECLARE result INT DEFAULT 0;
    accumulate: WHILE(i <= n) DO
    SET result = result + get_plug_fun(m, i);
    SET i = i+1;
    END WHILE accumulate;
    RETURN result;
    END;
    //
DELIMITER ;	

7. Arabic numerals to Chinese characters ?

DELIMITER //
DROP FUNCTION IF EXISTS tohanzi//
create FUNCTION tohanzi(n_LowerMoney DECIMAL)
RETURNS VARCHAR(120)
BEGIN
 Declare v_LowerStr VARCHAR(200) ;
 Declare v_UpperPart VARCHAR(200) ;
 Declare v_UpperStr VARCHAR(200) ;
 Declare i_I int ;
 set v_LowerStr = LTRIM(RTRIM(ROUND(n_LowerMoney,2 ) ) ) ;
 set i_I = 1 ;
 set v_UpperStr = '' ;
 while ( i_I <=char_length(v_LowerStr ) ) do
 set v_UpperPart = CONCAT( case substring(v_LowerStr,char_length(v_LowerStr) - i_I + 1,1 )
 WHEN '.' THEN ' element '
 WHEN '0' THEN ' zero '
 WHEN '1' THEN ' one '
 WHEN '2' THEN ' Ii. '
 WHEN '3' THEN ' 3 '
 WHEN '4' THEN ' boss '
 WHEN '5' THEN ' wu '
 WHEN '6' THEN ' lu '
 WHEN '7' THEN ' Retailer, '
 WHEN '8' THEN '  '
 WHEN '9' THEN ' nine '
 END,
 case i_I
 WHEN 1 THEN ' branch '
 WHEN 2 THEN ' horn '
 WHEN 3 THEN ''
 WHEN 4 THEN ''
 WHEN 5 THEN ' Ten '
 WHEN 6 THEN ' Bai '
 WHEN 7 THEN ' Thousand '
 WHEN 8 THEN ' ten thousand '
 WHEN 9 THEN ' Ten '
 WHEN 10 THEN ' Bai '
 WHEN 11 THEN ' Thousand '
 WHEN 12 THEN ' Billion '
 WHEN 13 THEN ' Ten '
 WHEN 14 THEN ' Bai '
 WHEN 15 THEN ' Thousand '
 WHEN 16 THEN ' ten thousand '
 ELSE ''
 END );
 set v_UpperStr =CONCAT( v_UpperPart , v_UpperStr) ;
 set i_I = i_I + 1 ;
 end while;
 set v_UpperStr = REPLACE(v_UpperStr,' zero ',' zero ') ;
 set v_UpperStr = REPLACE(v_UpperStr,' zero ',' zero ') ;
 set v_UpperStr = REPLACE(v_UpperStr,' Zero thousand ',' zero ') ;
 set v_UpperStr = REPLACE(v_UpperStr,' Zero zero ',' zero ') ;
 set v_UpperStr = REPLACE(v_UpperStr,' zero zero ',' zero ') ;
 set v_UpperStr = REPLACE(v_UpperStr,' Zero angle, zero point ',' whole ') ;
 set v_UpperStr = REPLACE(v_UpperStr,' Zero point ',' whole ') ;
 set v_UpperStr = REPLACE(v_UpperStr,' Zero angle ',' zero ') ;
 set v_UpperStr = REPLACE(v_UpperStr,' Billion yuan ',' One hundred million yuan ') ;
 set v_UpperStr = REPLACE(v_UpperStr,' Billion yuan ',' One hundred million yuan ') ;
 set v_UpperStr = REPLACE(v_UpperStr,' Billion ',' Billion ') ;
 set v_UpperStr = REPLACE(v_UpperStr,' Ten thousand yuan ',' Ten thousand yuan ') ;
 set v_UpperStr = REPLACE(v_UpperStr,' Ten thousand yuan ',' Ten thousand yuan ') ;
 set v_UpperStr = REPLACE(v_UpperStr,' zero ',' Billion ') ;
 set v_UpperStr = REPLACE(v_UpperStr,' zero ',' ten thousand ') ;
 set v_UpperStr = REPLACE(v_UpperStr,' zero yuan ',' element ') ;
 set v_UpperStr = REPLACE(v_UpperStr,' zero zero ',' zero ') ;
 if ( ' element ' = substring(v_UpperStr,1,1)) then
 set v_UpperStr = substring(v_UpperStr,2,(char_length(v_UpperStr) - 1));
 end if;
 if ( ' zero ' = substring(v_UpperStr,1,1)) then
 set v_UpperStr = substring(v_UpperStr,2,(char_length(v_UpperStr) - 1)) ;
 end if;
 if ( ' horn ' = substring(v_UpperStr,1,1)) then
 set v_UpperStr = substring(v_UpperStr,2,(char_length(v_UpperStr) - 1)) ;
 end if;
 if ( ' branch ' = substring(v_UpperStr,1,1)) then
 set v_UpperStr = substring(v_UpperStr,2,(char_length(v_UpperStr) - 1)) ;
 end if;
 if (' whole ' = substring(v_UpperStr,1,1)) then
 set v_UpperStr = ' Zero integer ' ;
 end if;
 return v_UpperStr;
 END;
 //
 DELIMITER ;

8. A function that randomly generates names ?

DELIMITER //
DROP FUNCTION IF EXISTS tohanzi//
CREATE FUNCTION CreateName()
RETURNS varchar(3)
begin
DECLARE LN VARCHAR(300);
DECLARE MN VARCHAR(500);
DECLARE FN VARCHAR(500);
DECLARE LN_N INT;
DECLARE MN_N INT;
DECLARE FN_N INT;
SET LN=' Li Wang Zhang Liu Chen Yang Huang Zhao Zhou Wu Xu sun Zhu Ma Hu Guo Lin He Gaoliang Zheng Luo song Xie Tang Han Cao Xu Deng Xiao Feng Zeng Cheng Cai Peng Pan Yuan Yu Dong Yu Su Ye Lu Wei Jiang Tian Du Ding Shen Jiang Fan Jiang Fu Zhong Lu Wang Dai Cui Ren Lu Liao Yao Fang Jinqiu Xia Tan Wei Jia Zou Shi Xiong Meng Qin Yan Xue Hou Lei Bailong Duan Hao Kong Shao Shi Mao Chang Wan Gu Lai Wu Kang He Yan Yin Qian Shi Niu Hong Gong ';
SET MN=' Wei Gang Yong Yi Jun Yun Lian Zhen Huan Xue Rong Ai Mei Xia Xiang Yue Ying Yuan Yan Rui fan Jia Qiong Qin Zhen Li Gui Di ye bicai FA Wu Lilin Lun Han Lang Bo Hong Yan Ruo Ming Peng bin Liang Dongwei Qi Kelun Xiang Xu Peng Ze Chen Chen Shi to build a home to build a tree Yan de River Zhe Jiang Chao Hao Lu Ya Qi Jing Yu Hua Hui Qiao Mei Jie Xin Ying Lichi Si Xin Bang Cheng Le Shaogong Song Shan Hou Qing Lei Min You Yu Ping Hong e Ling Xiang Yan Cai Lan Feng Jie Mei Xiujuan when she went to Britain Tai Sheng Xiongchen Jun Guan CE Teng Nan Rong Feng Hang Hong Feng Feng Qiang the Military peace, Eastern civilization, great strength, eternal health, broad vision, righteousness, prosperity, prosperity, benevolence, tranquility, wealth, prosperity, national victory, learning, auspiciousness, talent development, Wu Xinli, Qing feibin, Fushun, Xinzi, jietao, Changcheng, kangxingguang, Tianda, Anyan, Zhongmao, Jinjin, Lin Youjian, Biao, Bocheng, first respect, strengthen the society, think about the people, be brave, be brave, be proud, be generous, be grateful, be friends of the people, Yu He, Zhe Jiang, Chaohao, Liang Liang, Liang, Liang, Dongwei, Qi, Kelun, Xiang, Xu, Peng, Ze, Chenchen, build a family, make Shu, Yan, be virtuous, be prosperous Xiong Chen, Jun Guan, CE Teng, Nan Rong, Feng Hang Hong ';
SET FN=' Wei Gang Yong Yi Jun Yun Lian Zhen Huan Xue Rong Ai Mei Xia Xiang Yue Ying Yuan Yan Rui fan Jia Qiong Qin Zhen Li Gui Di ye bicai FA Wu Lilin Lun Han Lang Bo Hong Yan Ruo Ming Peng bin Liang Dongwei Qi Kelun Xiang Xu Peng Ze Chen Chen Shi to build a home to build a tree Yan de River Zhe Jiang Chao Hao Lu Ya Qi Jing Yu Hua Hui Qiao Mei Jie Xin Ying Lichi Si Xin Bang Cheng Le Shaogong Song Shan Hou Qing Lei Min You Yu Ping Hong e Ling Xiang Yan Cai Lan Feng Jie Mei Xiujuan when she went to Britain Tai Sheng Xiongchen Jun Guan CE Teng Nan Rong Feng Hang Hong Feng Feng Qiang the Military peace, Eastern civilization, great strength, eternal health, broad vision, righteousness, prosperity, prosperity, benevolence, tranquility, wealth, prosperity, national victory, learning, auspiciousness, talent development, Wu Xinli, Qing feibin, Fushun, Xinzi, jietao, Changcheng, kangxingguang, Tianda, Anyan, Zhongmao, Jinjin, Lin Youjian, Biao, Bocheng, first respect, strengthen the society, think about the people, be brave, be brave, be proud, be generous, be grateful, be friends of the people, Yu He, Zhe Jiang, Chaohao, Liang Liang, Liang, Liang, Dongwei, Qi, Kelun, Xiang, Xu, Peng, Ze, Chenchen, build a family, make Shu, Yan, be virtuous, be prosperous Xiong Chen, Jun Guan, CE Teng, Nan Rong, Feng Hang Hong ';
SET LN_N=CHAR_LENGTH(LN);
SET MN_N=CHAR_LENGTH(MN);
SET FN_N=CHAR_LENGTH(FN);
return Concat(substring(LN,ceil(rand()*LN_N),1),substring(MN,ceil(rand()*MN_N),1),substring(FN,ceil(rand()*FN_N),1));
End;
//
DELIMITER ;

 

原网站

版权声明
本文为[Lin fanchen coding]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/176/202206252045457532.html