mysql自定义函数(貌似处理页码)

本文介绍了一个MySQL函数的定义及其实现过程,该函数能够将输入字符串中的区间表示转换为独立数字序列。此外,还提供了一个字符串替换函数的示例,并展示了如何创建、调用及删除这些函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

T1表内容

name

-----------------------------

1-3,8,10-12
4,5,6
1,3-5,14
4
1-7,9

要转换为

 

--------------------------------------------------------------------------------

CREATE FUNCTION myFunction
(in_string      VARCHAR(255))
RETURNS VARCHAR(255)
begin
DECLARE l_new_string VARCHAR(255);
DECLARE part_string VARCHAR(255);
DECLARE num1 int;
DECLARE num2 int;
set l_new_string='';
while INSTR(in_string,',')>0 do
SET part_string=left(in_string,INSTR(in_string,',')-1);
IF (INSTR(part_string,'-'))>0 THEN
SET num1=left(part_string,INSTR(part_string,'-')-1);
SET num2=right(part_string,length(part_string)-INSTR(part_string,'-'));
 while num1<=num2 do
 set l_new_string=concat(l_new_string,' ',num1);
 set num1=num1+1;
 end while;
ELSE
set l_new_string=concat(l_new_string,' ',part_string);
end if;
set in_string=right(in_string,length(in_string)-INSTR(in_string,','));
end while;
IF (INSTR(in_string,'-'))>0 THEN
SET num1=left(in_string,INSTR(in_string,'-')-1);
SET num2=right(in_string,length(in_string)-INSTR(in_string,'-'));
 while num1<=num2 do
 set l_new_string=concat(l_new_string,' ',num1);
 set num1=num1+1;
 end while;
ELSE
set l_new_string=concat(l_new_string,' ',in_string);
end if;
RETURN(ltrim(l_new_string));
end

----------------------------------------------------------------------------------

 

结果正常

-------------

恶心的开发提出需求,不知道干啥用的,鄙视一下

 

---------------------------------------------------------------

一个很简单的 MySQL 函数定义,学习语法

01mysql>
02mysql> delimiter $$
03mysql>
04mysql> CREATEFUNCTION myFunction
05    ->    (in_string     VARCHAR(255),
06    ->     in_find_str   VARCHAR(20),
07    ->     in_repl_str   VARCHAR(20))
08    ->
09    ->   RETURNS VARCHAR(255)
10    -> BEGIN
11    ->   DECLARE l_new_string VARCHAR(255);
12    ->   DECLARE l_find_pos   INT;
13    ->
14    ->   SET l_find_pos=INSTR(in_string,in_find_str);
15    ->
16    ->   IF (l_find_pos>0)THEN
17    ->    SET l_new_string=INSERT(in_string,l_find_pos,LENGTH(in_find_str),in_repl_str);
18    ->   ELSE
19    ->    SET l_new_string=in_string;
20    ->   END IF;
21    ->   RETURN(l_new_string);
22    ->
23    -> END$$
24Query OK, 0 rowsaffected (0.00 sec)
25  
26mysql>
27mysql> delimiter ;
28mysql> selectmyFunction('ABC','A','Z');
29+---------------------------+
30| myFunction('ABC','A','Z') |
31+---------------------------+
32| ZBC                       |
33+---------------------------+
341 row inset (0.00 sec)
35  
36mysql> dropfunction myFunction;
37Query OK, 0 rowsaffected (0.00 sec)
38  
39mysql>
40mysql>
delimiter 标志开始,delimiter再标志函数结束,执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值