我有一个数据库列,其数据看起来像 file_name ||| file_id ||| field_id 我想运行查询以仅用 file_id
因此,我的查询本质上需要解析管道之间的file_id,然后更新字段以仅使用文件ID替换完整字符串。
答案 0 :(得分: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的语法。
答案 1 :(得分:1)
TRY
SELECT SUBSTRING( SUBSTRING_INDEX('file_name|||file_id|||field_id','|||', 2),
LOCATE('|', 'file_name|||file_id|||field_id' ) + 3 )