mysql 截取字符串并 update select

亲测有效  格式为  update 需要修改的表 b1 inner join (查询到的临时表)b2 on b1.id=b2.id set b1.要修改的字段=b2.查询到的值

 

因为想要把表中的一个字段的一部分取出来,另放一个新的字段里面,所以想到了mysql的字符串截取功能。

 

需要更新的数据:

select params, substring_index(params, '=', -1), paramId from task where expiredDate is null;

由于mysql不能直接使用set select的结果,所以必须使用inner join。

 

上完整栗子:

update task a inner join (select id, substring_index(params, '=', -1) as param_id from task b where b.expiredDate is null) c 
on a.id = c.id set a.paramId = c.param_id where a.expiredDate is null ;

   

 

附上截取字符串栗子:

1. 字符串截取:left(str, length)  

mysql> select left('sqlstudy.com', 3);
+-------------------------+  
| left('sqlstudy.com', 3) |  
+-------------------------+  
| sql                     |  
+-------------------------+  


2. 字符串截取:right(str, length)  

mysql> select right('sqlstudy.com', 3);  
+--------------------------+  
| right('sqlstudy.com', 3) |  
+--------------------------+  
| com                      |  
+--------------------------+  


3. 字符串截取:substring(str, pos); substring(str, pos, len)  


3.1 从字符串的第 4 个字符位置开始取,直到结束。  

mysql> select substring('sqlstudy.com', 4);
+------------------------------+
| substring('sqlstudy.com', 4) |
+------------------------------+
| study.com                    |
+------------------------------+


3.2 从字符串的第 4 个字符位置开始取,只取 2 个字符。  

mysql> select substring('sqlstudy.com', 4, 2);
+---------------------------------+
| substring('sqlstudy.com', 4, 2) |
+---------------------------------+
| st                              |
+---------------------------------+


3.3 从字符串的第 4 个字符位置(倒数)开始取,直到结束。  

mysql> select substring('sqlstudy.com', -4);
+-------------------------------+
| substring('sqlstudy.com', -4) |
+-------------------------------+
| .com                          |
+-------------------------------+


3.4 从字符串的第 4 个字符位置(倒数)开始取,只取 2 个字符。  

mysql> select substring('sqlstudy.com', -4, 2);
+----------------------------------+
| substring('sqlstudy.com', -4, 2) |
+----------------------------------+
| .c                               |
+----------------------------------+


  注意在函数 substring(str,pos, len)中, pos 可以是负值,但 len 不能取负值。  

 


4. 字符串截取:substring_index(str,delim,count)  


4.1 截取第二个 '.' 之前的所有字符。  

mysql> select substring_index('www.sqlstudy.com.cn', '.', 2);
+------------------------------------------------+
| substring_index('www.sqlstudy.com.cn', '.', 2) |
+------------------------------------------------+
| www.sqlstudy                                   |
+------------------------------------------------+


4.2 截取第二个 '.' (倒数)之后的所有字符。  

mysql> select substring_index('www.sqlstudy.com.cn', '.', -2);
+-------------------------------------------------+
| substring_index('www.sqlstudy.com.cn', '.', -2) |
+-------------------------------------------------+
| com.cn                                          |
+-------------------------------------------------+


4.3 如果在字符串中找不到 delim 参数指定的值,就返回整个字符串  

mysql> select substring_index('www.sqlstudy.com.cn', '.coc', 1);
+---------------------------------------------------+
| substring_index('www.sqlstudy.com.cn', '.coc', 1) |
+---------------------------------------------------+
| www.sqlstudy.com.cn                               |
+---------------------------------------------------+


 4.4 截取一个表某个字段数据的中间值 如该字段数据为  1,2,3  

mysql> select substring_index(substring_index(该字段, ',', 2) , ',', -1) from 表名;
+--------------------------------------------------------------+
| substring_index(substring_index(该字段, ',', 2);  , ',', -1)  |
+--------------------------------------------------------------+
| 2                                                            |
+--------------------------------------------------------------+

 

posted @ 2019-08-18 02:27  MR·小迷糊  阅读(324)  评论(0编辑  收藏  举报