1

の列値があるとしましょう'1|2|3|4|5'。これらの値は配列の文字列表現であり、文字列内の単一の値を (整数で) 削除して、'1|2|4|5'. 削除される整数が文字列のどこにでもある可能性がある場合、MySQL でこれを行う最も効率的な方法は何ですか?

4

2 に答える 2

1

次のようなものを使用できます。

UPDATE yourtable
SET col = TRIM(BOTH '|' FROM REPLACE(
            REPLACE(
              CONCAT('|',REPLACE(col, '|', '||'), '|'),
              '|3|', '')
            , '||', '|')
          )

ここでは、すべてを2倍に|して、最初に1つ、最後に1つ||追加します。このように、すべての要素は開始時と終了時|に独自のものを持っています。||

|3|これで、空の文字列に安全に置き換えることができます。

ここで、doubleをに変換し直し、文字列をトリミングして、最終的に最初と最後のを削除する必要が||あります||

ここで動作するのを見てください。

要素3が複数回存在できないことが確実な場合は、への2倍|をスキップでき、 。||に置き換える必要があります。残りは同じです。|3||

于 2013-01-29T15:24:05.063 に答える
0
update table set col=replace ( col, '3','')

これにより、列で大文字と小文字が区別される検索が実行されます。巨大なテーブルの場合は、この列にインデックスを付けてください。結果はかなり速くなります。

于 2013-01-29T15:04:22.007 に答える