我想更新一个非常大(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进行此操作?
答案 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时区分大小写匹配。