2017-12-17 3 views
0

URLを含む「リンク」テーブルのMySql DB内の特定のドメインで、「http」プロトコルを「https」に置き換えようとしています。検索と置換にmysqlのREGXPを使用

すべてのURLを「https」に変更する場合、私はREPLACE機能を使用していました。 しかし、それは私がREGEXPを使用する必要が特定のドメインだ理由:そう今のところ、私は、検索ステージになった

SELECT long_url 
FROM links 
WHERE long_url REGEXP '^http\:\/\/(www|academic|www3)\.?domain\.com' 

。 私は文書を調べましたが、今のところ私はSQLクエリから得た結果を置き換える方法がありません。

ご注意私はMySqlデータベースにのみアクセスできますが、PHPなど、SQLクエリよりも賢明なものは実行できません。

+0

MariaDBには 'REGEXP_REPLACE()'があります。 –

+0

ありがとうございますが、それは何かMySqlの標準ではない - それは関係ありません –

+0

あなたとは関係ないかもしれませんが、他の読者は、特にMariaDBを既に持っている、またはMariaDBに切り替えることができます。私はそれを解答ではなくコメントとして与えたことに注意してください。 –

答えて

2

MySQLには正規表現の置き換えがありません(あなた自身を書くかもしれないUDFの外)。マッチした文字列は、常にhttpで始まるので

UPDATE links 
SET long_url = REPLACE(long_url, 'http://', 'https://') 
WHERE long_url REGEXP '^http\:\/\/(www|academic|www3)\.?domain\.com'; 
+0

@TimBiegeleisenが述べたように、 'MySQL'には、[PREG](https://github.com)と呼ばれる' REGEX'関連のものがある[UDF](http://www.mysqludf.org/)の素晴らしいコレクションがあります。/mysqludf/lib_mysqludf_preg#readme)。 – marcell

+0

ティムの質問が私の答えです。ありがとうございました –

1

::次の操作を実行できます。

SELECT 'https' || SUBSTRING(long_url , 4) 
FROM links 
WHERE long_url REGEXP '^http\:\/\/(www|academic|www3)\.?openu\.ac\.il' 

UPDATE links 
SET long_url = 'https' || SUBSTRING(long_url , 4) 
WHERE long_url REGEXP '^http\:\/\/(www|academic|www3)\.?openu\.ac\.il' 

私はmysqlのに気づいていないよしかし、私たちは、あなたの更新のWHERE句でREGEXPを使用することができますregex replace関数です。

+0

"||"行う ? –

+1

@john_black - '||'は論理演算では 'OR'と同じです:https://dev.mysql.com/doc/refman/5.7/en/logical-operators.html#operator_or;ここは_incorrect_です。正しい構文は 'CONCAT(...)' –