0

我想修剪这个字符串(这些字符串存储在一个列中)

 [17332] Rohayati Bakri [20611] Nazrie Haslieanie [20612] Nur Izzati

进入这个(也存储在一个列中)

 Rohayati Bakri, Nazrie Haslieanie, Nur Izzati

仅使用 Mysql 查询。参考 id -> [xxxxx] 都具有相同的长度。

是否可以?

4

4 回答 4

0

在一个非常通用的级别上,您可以尝试一下

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
于 2013-07-31T06:55:24.910 回答
0

您也可以尝试修剪功能

UPDATE table_name SET col_name = SUBSTRING(col_name, 7)

它将修剪前 7 个字符。

于 2013-07-31T07:01:40.153 回答
0

这可以通过正则表达式来完成。

SELECT REPLACE(column, '\[[0-9]*\]', '') FROM table;

如果 MySQL 支持它们。不幸的是 MySQL 不支持REPLACE.

但是你可以用UDF. 是一个可能对您有所帮助的帖子。

于 2013-07-31T07:18:46.287 回答
0

不幸的是,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

这可能会影响与该模式匹配的其他一些数据,因此请自行承担风险。

于 2013-07-31T07:23:27.243 回答