• ブログ
  • >
  • [SQLの基本]正規表現入門: 正規表現関数の使い方

SQLの基本:正規表現入門:正規表現関数の使い方

投稿日:

はじめに

SQLでは、正規表現を使用して複雑なパターンマッチングを行うことができます。正規表現を使用することで、文字列のパターンに基づいてデータを検索、抽出、操作することができます。今回は、SQLでの正規表現の基本的な使い方と、その応用について解説します。

正規表現を使用する関数

SQLには、正規表現を使用するためのさまざまな関数があります。一般的に使用される関数には、以下のものがあります。

REGEXP or RLIKE, REGEXP_LIKE, REGEXP_INSTR, REGEXP_REPLACE, REGEXP_SUBSTR

REGEXP (RLIKE)

REGEXPまたはRLIKEは、指定したパターンに一致する行を検索するために使用されます。

SELECT 
  column1, 
  column2 
FROM table_name WHERE column_name REGEXP 'pattern';
SELECT 
  column1, 
  column2 
FROM table_name WHERE column_name RLIKE 'pattern';

例 employeesテーブルから、名前が「A」または「E」で始まる従業員を取得するクエリは次の通りです。

SELECT 
  first_name, 
  last_name 
FROM employees WHERE first_name REGEXP '^[AE]';

REGEXP_LIKE

REGEXP_LIKEは、指定したパターンに一致するかどうかをチェックするために使用されます。

SELECT 
  column1, 
  column2 
FROM table_name WHERE 
REGEXP_LIKE(column_name, 'pattern');

例 employeesテーブルから、名前が「A」または「E」で始まる従業員を取得するクエリは次の通りです。

SELECT 
  first_name, 
  last_name 
FROM employees 
WHERE REGEXP_LIKE(first_name, '^[AE]');

REGEXP_INSTR

REGEXP_INSTRは、指定したパターンが最初に出現する位置を返します。

SELECT 
  REGEXP_INSTR(column_name, 'pattern') AS position 
FROM table_name;

例 employeesテーブルから、名前に「a」が最初に出現する位置を取得するクエリは次の通りです。

SELECT 
  first_name, 
  REGEXP_INSTR(first_name, 'a') AS position 
FROM employees;

REGEXP_REPLACE

REGEXP_REPLACEは、指定したパターンに一致する部分を他の文字列に置換します。

SELECT
  REGEXP_REPLACE(column_name, 'pattern', 'replacement') AS result 
FROM table_name;

例 employeesテーブルから、名前の中の「a」を「@」に置換するクエリは次の通りです。

SELECT 
  first_name, 
  REGEXP_REPLACE(first_name, 'a', '@') AS replaced_name 
FROM employees;

REGEXP_SUBSTR

REGEXP_SUBSTRは、指定したパターンに一致する部分文字列を抽出します。

SELECT 
  REGEXP_SUBSTR(column_name, 'pattern') AS result 
FROM table_name;

例 employeesテーブルから、名前に含まれる最初の「a」を含む部分文字列を抽出するクエリは次の通りです。

SELECT 
  first_name, 
  REGEXP_SUBSTR(first_name, 'a') AS substr 
FROM employees;

応用例

メールアドレスの検証

テーブルusersから、有効なメールアドレス形式のユーザーを取得するクエリは次の通りです。

SELECT 
  email 
FROM users 
WHERE email REGEXP '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$';

電話番号の形式変更

テーブルcontactsから、電話番号の形式を「(123) 456-7890」に変換するクエリは次の通りです。

SELECT 
  phone_number, 
  REGEXP_REPLACE(phone_number, '^(\d{3})(\d{3})(\d{4})$', '(\1) \2-\3') AS formatted_phone
FROM contacts;

まとめ

今回は、SQLの正規表現を使用した文字列操作について学びました。正規表現を使うことで、複雑なパターンマッチングや文字列操作を簡単に実現することができます。次回の記事では、さらに高度なSQLクエリやデータベース操作について詳しく解説していきます。ぜひご期待ください!