🔎

SQLで英数字以外の文字の検出方法

2022/11/23に公開

英数字以外の文字の検出方法

かっこの中にある記号以外が入っているレコードを取得するクエリ。
タイ語のマスタ整備など、英数字記号以外の文字が入ったデータを相手にするときなどで使用する。(下記はPostgreSQL上で動作確認している)

英数字だったら0-9A-Za-zだけでよいが、記号まで入れるとなると、以下のように[ ]内にホワイトリスト方式でいれていくことになる。

chk_without_symbol
SELECT * FROM m_item
WHERE item_name_trans !~ '^[0-9a-zA-Z\&\s\/\%\.\(\)\-\+\*\#\,\_\!\:\?\@\<\>\[\]\;\|\"\''Éı\’]*$'
ORDER BY item_name
;

英数字+欧州文字以外の文字の検出方法

フランス語やイタリア語など、ウムラウトのようなものも入っている文字もホワイトリストに入れるためには、以下がよい。À-ÿが加わっている。
参考:フランス語を正規表現でマッチングさせるには?

chk_without_latin_character
SELECT * FROM m_item
WHERE item_name_trans !~ '^[À-ÿ0-9a-zA-Z\&\s\/\%\.\(\)\-\+\*\#\,\_\!\:\?\@\<\>\[\]\;\|\"\''Éı\’]*$'
ORDER BY item_name

Discussion