5

MySQL でいくつかのデータを調べていますが、このような列からいくつかの情報を削除する必要があります。

**sometext** (something else)

残念ながら、データには一貫性がありません。すべてのデータがこの構造に従うわけではなく、最初の部分だけを持つものもあります。

**sometext**

そのため、パーツを残すために、ブラケット間のすべてを削除し、次にブラケット自体を削除する方法が必要**sometext**です。

4

6 に答える 6

13

この解決策を使用してください:

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が削除されるためです。

SQLFiddle デモ

于 2012-08-31T11:21:54.637 に答える
3

function を使用してみてくださいSUBSTRING_INDEX。構文は次のとおりです。

SUBSTRING_INDEX(str,delim,count)

この場合、次のようになります。

UPDATE tbl
SET    txt = (SELECT SUBSTRING_INDEX(txt, '(', 1));

クエリをチェックしていませんが、これは役に立ちます。この機能の詳細については、こちらを参照してください。

于 2012-08-31T11:17:44.593 に答える
2

MySQLは正規表現をサポートしていないため、PHPなどで記述された外部プログラムを使用するか、ストアドプロシージャを使用するしかありません。

于 2012-08-31T11:15:27.983 に答える
0

UDF(ユーザー定義関数)を使用できます

これをチェックしてくださいhttps://launchpad.net/mysql-udf-regexp

したがって、正規表現に一致する角かっこを作成し、この関数で通常のREPLACEステートメントを使用する必要があります:)

于 2012-08-31T11:15:56.220 に答える
0

これを試してください:

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 ステートメントで使用します。

于 2012-08-31T11:22:12.890 に答える