3

テーブルに長いテキスト列「説明」があり、メールアドレスが含まれることがあります。この電子メール アドレスを抽出し、行ごとに別の列に追加する必要があります。これは MySQL で実行できますか?

4

5 に答える 5

3

純粋なMysqlを使用した正規表現マッチングからのみ一致部分を選択することはできません。mysql 拡張機能を使用できます ( Return matching patternで説明されているように)、またはスクリプト言語 (例: PHP) を使用できます。

于 2013-06-12T16:35:20.580 に答える
1

MySQLには正規表現がありますが、正規表現は電子メール アドレスを照合する最良の方法ではありません。クライアント言語を使用することを強くお勧めします。

于 2013-06-12T18:34:03.353 に答える
0

MySQL UDFをインストールできる場合は、次のlib_mysqludf_pregことができます。

SET @regex = "/([a-z0-9!#\$%&'\*\+\/=\?\^_`\{\|\}~\-]+(?:\.[a-z0-9!#\$%&'\*\+\/=\?^_`{\|}~\-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|aero|arpa|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|post|pro|tel|travel|xxx))/i";

SELECT 
    PREG_CAPTURE(@regex, description) 
FROM 
    example 
WHERE
    PREG_CAPTURE(@regex, description) > '';

フィールドから最初のメールアドレスを抽出しdescriptionます。

REGEXP演算子は単に 1 または 0 を返し、正規表現が一致した場所の場所ではないため、別の解決策は考えられません。

于 2013-06-12T18:27:29.380 に答える