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 )