0

特定の文字列または文字の前後の空白 (1 つ以上のスペース) を削除して行を更新することはできますか? 特定の文字 (@) の前後のすべてのスペースを削除する必要がありますが、セル内の他のスペースもそのまま残します。

例:

'This is a simple     @ example'

に更新する必要があります

'This is a simple@example'

同じく:

'This is another  @example' 

に更新する必要があります

'This is another@example'

PHP を使用してこれを行うことができますが、単一のクエリでこれを行う方法があれば、はるかに簡単になります。

4

2 に答える 2

0

これはどうですか:

SELECT REPLACE(REPLACE(line, ' @', '@'), '@ ', '@') FROM tab1;

sqlfiddle

アップデート:

@ の前後の任意の数のスペースを削除できるようにするには、次のようにします。

SELECT CONCAT(RTRIM(LEFT(line,LOCATE('@',line)-1)),'@',
       LTRIM(SUBSTR(line,LOCATE('@',line)+1)))
FROM tab1;

これをいじるには、新しいsqlfiddleを参照してください。

行に複数の @ がある場合、このメソッドは最初の @ に対してのみ機能することに注意してください。

于 2013-04-26T15:08:22.760 に答える
0

置換で使用できるデフォルトの正規表現はありません。したがって、次のオプションがあります。

  1. MySQL を regex-replace で拡張する: UDF (ユーザー定義関数、正確にはこれ) を使用して正規表現置換を行うことができます。次に、のようなものを使用して\s*@\s*、 の周りに複数のスペースを示すことができます@

  2. デフォルトの置換を使用します@。置換を「ハードコード」して、面倒な(そして決して完了しない)タスク の前後にあるいくつかのスペースを考慮する必要があります。@多くの置換、または特定の機能の繰り返し (記号から 1 つのスペースを 100 回削除する) で終わるでしょう。明確にするために、コメントで言及されている二重置換と@lukschの回答は、1つ以上のスペースには十分ではありません。

于 2013-04-26T15:09:33.833 に答える