我想修剪这个字符串(这些字符串存储在一个列中)
[17332] Rohayati Bakri [20611] Nazrie Haslieanie [20612] Nur Izzati
进入这个(也存储在一个列中)
Rohayati Bakri, Nazrie Haslieanie, Nur Izzati
仅使用 Mysql 查询。参考 id -> [xxxxx] 都具有相同的长度。
是否可以?
在一个非常通用的级别上,您可以尝试一下
UPDATE MyTable
SET StringColumn = REPLACE (StringColumn, 'SearchForThis', 'ReplaceWithThis')
WHERE SomeOtherColumn LIKE '%PATTERN%'
在您的情况下,您说这些被转义了,但是由于您没有指定它们是如何转义的,所以假设它们被转义到 GREATERTHAN
UPDATE MyTable
SET StringColumn = REPLACE (StringColumn, 'GREATERTHAN', '<')
WHERE articleItemLIKE '%GREATERTHAN%'
由于您的查询实际上将在字符串内部工作,因此您的 WHERE 子句进行模式匹配可能会提高任何性能 - 它实际上将为服务器生成更多工作。除非您有另一个 WHERE 子句成员可以使此查询执行得更好,否则您可以简单地执行如下更新:
UPDATE MyTable
SET StringColumn = REPLACE (StringColumn, 'GREATERTHAN', '<')
从完全不同的角度进来:
您可以在选择数据时执行此操作(而不是在保存时)
所以而不是:
SELECT MyURLString From MyTable
你可以做
SELECT REPLACE (MyURLString, 'GREATERTHAN', '<') as MyURLString From MyTable
您也可以尝试修剪功能
UPDATE table_name SET col_name = SUBSTRING(col_name, 7)
它将修剪前 7 个字符。
这可以通过正则表达式来完成。
SELECT REPLACE(column, '\[[0-9]*\]', '') FROM table;
如果 MySQL 支持它们。不幸的是 MySQL 不支持REPLACE
.
但是你可以用UDF
. 这是一个可能对您有所帮助的帖子。
不幸的是,MySQL 不支持REPLACE
. 蛮力方法是:
sed
命令是:
mysqldump -u login -p db your_table > dump.sql
sed 's/\[[0-9]\{5\}\]//g' dump.sql > newdump.sql
mysqlimport -u login -p db your_table < newdump.sql
这可能会影响与该模式匹配的其他一些数据,因此请自行承担风险。