Mysql 从字段中提取一些字符
例如,我在这个领域:Mysql 从字段中提取一些字符,mysql,Mysql,例如,我在这个领域: Pb de HSPA Rab setup sur SFX4149F11 depuis 18/11 我的目标是在“sur”后面加上三个字符。 我尝试了这个函数。但在结果中,它似乎是空的 delimiter | CREATE FUNCTION METTRE(s VARCHAR(2000)) RETURNS varchar(2000) DETERMINISTIC BEGIN DECLARE open INT; DECLARE
Pb de HSPA Rab setup sur SFX4149F11 depuis 18/11
我的目标是在“sur”后面加上三个字符。
我尝试了这个函数。但在结果中,它似乎是空的
delimiter |
CREATE FUNCTION METTRE(s VARCHAR(2000)) RETURNS varchar(2000)
DETERMINISTIC
BEGIN
DECLARE open INT;
DECLARE close INT;
DECLARE someLimit INT;
DECLARE str VARCHAR(2000);
DECLARE toFind VARCHAR(2000);
DECLARE nom VARCHAR(20000);
SET open = 1;
SET close = 1;
SET toFind = s ;
SET someLimit = 100;
SET str ='';
WHILE close > 0 and open > 0 and someLimit > 0 DO
SET someLimit = someLimit -1;
SET open = locate('sur',toFind);
IF open > 0 THEN
SET toFind = SUBSTRING(toFind,open);
SET close = locate(4,toFind);
IF close > 2 THEN
SET nom=SUBSTRING(toFind,2,close-2);
SET toFind = SUBSTRING(toFind,close);
END IF;
END IF;
END WHILE;
return SUBSTRING(str,2);
END |
delimiter;
谢谢。如果您总是在sur之后寻找3个字符,并且如果后面有空格,则可以更轻松地完成
mysql>
select
substring(
trim(
substring_index(
'Pb de HSPA Rab setup sur SFX4149F11 depuis 18/11','sur ',-1
)
),
1,3) as n;
+-----+
| n |
+-----+
| SFX |
+-----+
在上面的示例中,只需将硬编码数据替换为表中的列名称即可
select
substring(
trim(
substring_index(
yor_col_name,'sur ',-1
)
),
1,3) as n
从注释来看,您似乎正在尝试更新同一表中的其他列,因此下面是一个示例
mysql> select * from test ;
+--------------------------------------------------+-------------+
| val | Affected_CI |
+--------------------------------------------------+-------------+
| Pb de HSPA Rab setup sur SFX4149F11 depuis 18/11 | NULL |
| Pb de HSPA Rab setup sur LJK4149F11 depuis 18/11 | NULL |
| Pb de HSPA Rab setup sur MSP4149F11 depuis 18/11 | NULL |
+--------------------------------------------------+-------------+
mysql> update test set Affected_CI = substring(trim(substring_index(val,'sur ',-1)),1,3) ;
Query OK, 2 rows affected (0.04 sec)
Rows matched: 3 Changed: 2 Warnings: 0
mysql> select * from test ;
+--------------------------------------------------+-------------+
| val | Affected_CI |
+--------------------------------------------------+-------------+
| Pb de HSPA Rab setup sur SFX4149F11 depuis 18/11 | SFX |
| Pb de HSPA Rab setup sur LJK4149F11 depuis 18/11 | LJK |
| Pb de HSPA Rab setup sur MSP4149F11 depuis 18/11 | MSP |
+--------------------------------------------------+-------------+
“SFX4149F11 depuis 18/11上的Pb de HSPA Rab setup sur SFX4149F11 depuis 18/11”是一个列字段,但我想在所有列上运行它。是的,您可以使用列名重新绘制它。谢谢。现在,我尝试插入结果:insert INTO incident Infected_CI值选择substringtrimsubstring_indexTitle,'sur',-1,1,3作为事件中的n,但没有result@nabil123456:如果标题值中不包含“sur”文字,substring_index返回输入字符串,即title列的值,原样。Abhik Chakraborty,我尝试使用:insert INTO incident infected_CI value选择substringtrimssubstring_indexTitle,'sur',1,3作为n from incident,但没有结果