テーブルに長いテキスト列「説明」があり、メールアドレスが含まれることがあります。この電子メール アドレスを抽出し、行ごとに別の列に追加する必要があります。これは MySQL で実行できますか?
質問する
4386 次
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 に答える