[解決済み】MySQLで正規表現による置換を行うには?
質問
500k行のテーブルがあり、varchar(255) UTF8カラムがあります。
filename
には、ファイル名が含まれています。
ファイル名から様々な奇妙な文字を取り除こうとしている。文字クラスを使おうと思った。
[^a-zA-Z0-9()_ .\-]
では MySQLに正規表現で置換できる関数はありますか? ? REPLACE()関数と同じような機能を探しているのですが、簡単な例を以下に示します。
SELECT REPLACE('stackowerflow', 'ower', 'over');
Output: "stackoverflow"
/* does something like this exist? */
SELECT X_REG_REPLACE('Stackoverflow','/[A-Zf]/','-');
Output: "-tackover-low"
について知っています。 REGEXP/RLIKE をチェックするだけです。 もし ではなく、一致する 何 である。
(I
かもしれない
をする。
SELECT pkey_id,filename FROM foo WHERE filename RLIKE '[^a-zA-Z0-9()_ .\-]'
をPHPスクリプトから実行します。
preg_replace
とし、"
UPDATE foo ... WHERE pkey_id=...
しかし、それは最後の手段であるスロー&醜いハックのように見える)
解決方法は?
とは
MySQL 8.0+
をネイティブで使用することができます。
REGEXP_REPLACE
関数を使用します。
REGEXP_REPLACE(expr, pat, repl[, pos[, occurrence[, match_type]]])
文字列の中に現れるものを置き換えます。 expr で指定された正規表現にマッチするもので、パターン パット という置換文字列で repl という文字列を返します。もし expr , パット または レップ は
NULL
であれば、返り値はNULL
.
そして 正規表現のサポート :
前回は MySQL は Henry Spencer 正規表現ライブラリを使用し、正規表現演算子 (
REGEXP
,RLIKE
).正規表現のサポートは、International Components for Unicode (ICU) を使用して再実装されており、完全な Unicode サポートとマルチバイト・セーフを提供します。そのため
REGEXP_LIKE()
関数と同じように正規表現マッチングを行います。REGEXP
とRLIKE
演算子で、現在はその関数の同義語になっています。 さらにREGEXP_INSTR()
,REGEXP_REPLACE()
そしてREGEXP_SUBSTR()
関数があり,それぞれマッチする位置を探したり,部分文字列の置換や抽出を行うことができます。
SELECT REGEXP_REPLACE('Stackoverflow','[A-Zf]','-',1,0,'c');
-- Output:
-tackover-low
関連
-
[解決済み] 正規表現で変数を使うには?
-
[解決済み] ルートユーザーでログインしているのに、phpMyAdminがデータベースを作成する権限がないと言う
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] 単語を含まない行にマッチする正規表現
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] 正規表現における非捕捉グループとは何ですか?
-
[解決済み] JavaScriptの正規表現でマッチしたグループにアクセスするにはどうすればよいですか?
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] 有効な正規表現を検出するための正規表現はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Fatal error: mysqldをrootで実行する方法は、マニュアルの「セキュリティ」セクションをお読みください。
-
[解決済み] エラー:テーブル '<table-name>' に対するユーザー '<userid>'@'<ip-address>' への select コマンドが拒否されました。
-
[解決済み] whereステートメントによるmysqlの一括更新
-
[解決済み] MySQLです。テーブルを作成できません (errno: 150)
-
[解決済み] WindowsでMySQLの画面コンソールをクリアする方法は?
-
[解決済み] DateTime 日付と時間によるグループ化
-
[解決済み] MySQLの更新datetimeフィールド
-
[解決済み] MySQLのカラムを並べ替えるには?
-
[解決済み] MySQLで "no "キーワードは何に使うのですか?
-
[解決済み] MySQLフィールドの先頭と末尾のホワイトスペースを削除するには?