协助正则表达式mysql查询

时间:2012-11-05 13:02:02

标签: mysql

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

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

2 个答案:

答案 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  )