0

次のようなデータを持つ「matches」という名前の文字列列があります。

054T,Arequipa,Peru

たとえば、最初に出現する用語を抽出するなど、部分文字列を抽出するためのクエリを使用しています。

SUBSTRING_INDEX(matches, ',', 1)

054T を正常に返します。問題は、1 つ以上のスペースで区切られたデータがあることです。

054T     Arequipa    Peru

と:

SUBSTRING_INDEX(matches, ' ', 1)

は 054T を返しません。1 つ以上のスペースの区切り記号のような正規表現は何でしょうか?

ありがとう

4

1 に答える 1

1

これでうまくいくはずです:

SELECT LEFT(matches, LOCATE(' ', matches) - 1);

LOCATE最初の空白記号のインデックス (1 ベース) を返し、LEFT文字列の左側からその数の記号を取得するだけです。

そして、このスニペットは、空白が含まれていない場合、値自体を返します:

SELECT IF(
  LOCATE(' ', matches) != 0, 
  LEFT(matches, LOCATE(' ', matches) - 1), 
  matches
);

そして、あなたが述べたように、スペースとタブの両方が存在する可能性がある場合は、それに応じて文字列を準備してください:

SELECT LEFT(matches, LOCATE(' ', REPLACE(matches, '\t', ' ')) - 1);

それでも、それを正規化できないのだろうか:

UPDATE your_table SET matches = REPLACE(matches, '\t', REPEAT(' ', 4));

... または、おそらくそれを別のテーブルに移動することをお勧めします (現在、実際に変装したセットのように見えるため)。

于 2013-06-03T21:14:30.267 に答える