0

我有一个数据库列,其中的数据看起来像 file_name|||file_id|||field_id 我想运行一个查询以仅用file_id替换数据。

所以,我的查询,本质上需要解析出管道之间的file_id,然后更新字段以仅用文件id替换完整的字符串。

4

2 回答 2

1

您可以使用旧格式查找行

WHERE mycol LIKE '%|||%|||%';

要提取中间字段,您可以使用

SUBSTRING_INDEX(mycol, '|||', -2)

这将返回 'fileid|||fieldid',然后

SUBSTRING_INDEX(SUBSTRING_INDEX(mycol, '|||', -2), '|||', 1)

这将返回'fileid'。

所以:

UPDATE mytable SET mycol = SUBSTRING_INDEX(SUBSTRING_INDEX(mycol, '|||', -2), '|||', 1) WHERE mycol LIKE '%|||%|||%';

但首先我会检查

SELECT 
    mycol AS beforethecure,
    SUBSTRING_INDEX(SUBSTRING_INDEX(mycol, '|||', -2), '|||', 1) AS afterthecure
FROM mytable
WHERE mycol LIKE '%|||%|||%';

以防万一。并且可能对“after”的结果进行 SELECT,以查看它们是否符合 fileid 的语法。

于 2012-11-05T13:27:04.137 回答
1

尝试

SELECT SUBSTRING( SUBSTRING_INDEX('file_name|||file_id|||field_id','|||', 2), 
                 LOCATE('|',  'file_name|||file_id|||field_id' ) + 3  ) 
于 2012-11-05T13:34:16.707 回答