MySQL中的拆分值

时间:2017-07-23 12:06:36

标签: php mysql

我想更新一个非常大(1米行)的表上的字段。我想从以下网址更新:

+-----------------------------------------------------------+
|                            ref                            |
+-----------------------------------------------------------+
| 0001___000000000003616655___IVANTI UK___TEMPLATE MATERIAL |
+-----------------------------------------------------------+

为:

+-------------------------------+
|              ref              |
+-------------------------------+
| IVANTI UK___TEMPLATE MATERIAL |
+-------------------------------+

所以基本上它只是将ref固定长度)从sid___sku___mfr___pnum更改为mfr___pnum格式。

在PHP中,我这样做(pseduo代码):

list($p['sid'], $p['sku'], $p['mfr'], $p['pnum']) = explode('___', $row['ref']);
$row['ref'] = $p['mfr'] . '___' . $p['pnum'];

想知道是否可以使用高性能查询直接使用MySQL进行此操作?

1 个答案:

答案 0 :(得分:2)

select SUBSTRING_INDEX(ref,'___',-2) from test

0001___000000000003616655___IVANTI UK___TEMPLATE MATERIAL
=>
IVANTI UK___TEMPLATE MATERIAL

https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_substring-index

  

<强> SUBSTRING_INDEX(STR,DELIM,计数)

     

在计数出现之前,从字符串str返回子字符串   分隔符delim。如果计数是正数,那么一切都在左边   返回最终分隔符(从左边开始计数)。 如果算数是   否定,最终分隔符右侧的所有内容(计数   从右边)返回 。 SUBSTRING_INDEX()执行一个   搜索delim时区分大小写匹配。