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,但没有结果