我有一个数据库列,其中的数据看起来像 file_name|||file_id|||field_id 我想运行一个查询以仅用file_id替换数据。
所以,我的查询,本质上需要解析出管道之间的file_id,然后更新字段以仅用文件id替换完整的字符串。
我有一个数据库列,其中的数据看起来像 file_name|||file_id|||field_id 我想运行一个查询以仅用file_id替换数据。
所以,我的查询,本质上需要解析出管道之间的file_id,然后更新字段以仅用文件id替换完整的字符串。
您可以使用旧格式查找行
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 的语法。
尝试
SELECT SUBSTRING( SUBSTRING_INDEX('file_name|||file_id|||field_id','|||', 2),
LOCATE('|', 'file_name|||file_id|||field_id' ) + 3 )