MySQL でいくつかのデータを調べていますが、このような列からいくつかの情報を削除する必要があります。
**sometext** (something else)
残念ながら、データには一貫性がありません。すべてのデータがこの構造に従うわけではなく、最初の部分だけを持つものもあります。
**sometext**
そのため、パーツを残すために、ブラケット間のすべてを削除し、次にブラケット自体を削除する方法が必要**sometext**
です。
この解決策を使用してください:
UPDATE tbl
SET txt = REPLACE(txt, SUBSTRING(txt, LOCATE('(', txt), LENGTH(txt) - LOCATE(')', REVERSE(txt)) - LOCATE('(', txt) + 2), '')
WHERE txt LIKE '%(%)%'
MySQL の最小限の正規表現サポートの制限により、これは機能しないことに注意してください(空白が返されます)。
(replacetext1) keepthistext1 (replacetext2) keepthistext2 (replacetext3)
keepthistext1
...保持したい場合は、最初の開き括弧と最後の閉じ括弧の間のすべてkeepthistext2
が削除されるためです。
function を使用してみてくださいSUBSTRING_INDEX
。構文は次のとおりです。
SUBSTRING_INDEX(str,delim,count)
この場合、次のようになります。
UPDATE tbl
SET txt = (SELECT SUBSTRING_INDEX(txt, '(', 1));
クエリをチェックしていませんが、これは役に立ちます。この機能の詳細については、こちらを参照してください。
MySQLは正規表現をサポートしていないため、PHPなどで記述された外部プログラムを使用するか、ストアドプロシージャを使用するしかありません。
UDF(ユーザー定義関数)を使用できます
これをチェックしてくださいhttps://launchpad.net/mysql-udf-regexp
したがって、正規表現に一致する角かっこを作成し、この関数で通常のREPLACEステートメントを使用する必要があります:)
これを試してください:
SELECT REPLACE('abdcejkhh klhklhkl (abc) agjkk',SUBSTRING('abdcejkhh klhklhkl (abc) agjkk',POSITION('(' IN 'abdcejkhh klhklhkl (abc) agjkk'),(length('abdcejkhh klhklhkl (abc) agjkk')-POSITION(')' IN 'abdcejkhh klhklhkl (abc) agjkk'))),'')
これを update ステートメントで使用します。