構文解説2026/9/1

SQL文字列関数を使いこなす:高度なデータ操作テクニック

SQLの文字列関数といえば、SELECT文でデータを整形したり、特定のパターンで検索したりする際に欠かせない存在です。これまでに、CONCATやSUBSTRING、LENGTHといった基本的な関数について学んだ方も多いでしょう。

しかし、実際のデータ分析やアプリケーション開発の現場では、これらの基本関数だけでは対応できない、より複雑な文字列操作が求められる場面にしばしば遭遇します。

例えば、

  • メールアドレスからドメイン部分だけを抽出し、さらにそれを正規化したい
  • ユーザーが入力した不揃いな住所データを、一定のフォーマットに統一したい
  • 特定のキーワードを含むが、特定の単語は含まないという、より詳細な検索条件を設定したい

といったケースです。

こうした高度な要求に応えるためには、基本的な関数を組み合わせたり、さらに強力な文字列関数を使いこなしたりする必要があります。

本記事では、SQLの文字列関数について、初学者向けの入門編から一歩進んだ、より実践的で応用的な使い方を解説していきます。

より柔軟なデータ抽出を可能にする応用関数

基本的な文字列関数であるSUBSTRINGLENGTHは、文字列の一部を切り出したり、その長さを取得したりするのに便利です。

しかし、もっと複雑なパターンマッチングや、文字列の置換を行いたい場合、これらの関数だけでは限界があります。

そこで役立つのが、LIKE演算子やREPLACE関数、そして正規表現を扱える関数群です。

パターンマッチングの強化:LIKE演算子の活用

LIKE演算子は、WHERE句で文字列のパターン検索を行うための基本的なツールです。

%(0文字以上の任意の文字列)や_(1文字の任意の文字列)といったワイルドカードを使って、柔軟な条件指定が可能です。

例えば、'A%'は'A'で始まる文字列にマッチし、'%B'は'B'で終わる文字列にマッチします。

しかし、LIKE演算子だけでは、例えば「'A'で始まり、かつ'Z'で終わる」といった、より複雑な条件を直接記述するのは困難です。

ここで、LIKE演算子を複数組み合わせたり、後述する正規表現関数と併用したりすることで、より高度なパターンマッチングが可能になります。

文字列の置換:REPLACE関数

REPLACE関数は、文字列中の特定の文字列を別の文字列に置換する際に使用します。

例えば、ユーザーが入力した商品名に誤って含まれている不要な記号を取り除きたい場合などに重宝します。

SELECT REPLACE('SQL Quest!', '!', '?') AS replaced_string;

実行結果:

replaced_string
---------------
SQL Quest?

この関数は、単純な置換だけでなく、連続した置換を行うことで、より複雑なデータクリーニングにも応用できます。

例えば、複数の種類の不要な文字を一度に取り除きたい場合、REPLACE関数をネストして使用することも可能です。

正規表現による強力なパターンマッチング

SQLiteでは、標準で正規表現を扱うための関数は提供されていませんが、多くのデータベースシステム(PostgreSQL, MySQLなど)ではREGEXP演算子やREGEXP_REPLACE関数などが利用できます。

もしお使いのデータベースで正規表現がサポートされている場合、これは文字列操作の強力な武器となります。

正規表現を使えば、例えば以下のような複雑な条件も記述できます。

  • メールアドレスの形式が正しいかチェックする
  • 電話番号のパターンに一致するか確認する
  • 特定の単語(例:「限定」「セール」)を含みつつ、別の単語(例:「中古」)を含まない、といった条件で検索する

正規表現は学習コストが高いですが、習得すればデータ抽出の自由度が格段に向上します。

-- PostgreSQLの例
SELECT column_name
FROM your_table
WHERE column_name ~ '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$';

これは、メールアドレスの形式に合致する文字列を抽出する例です。

このように、正規表現は非常に強力ですが、その複雑さゆえに、まずはLIKE演算子で実現できる範囲を理解し、必要に応じて正規表現を導入するのが賢明です。

データ整形と正規化に役立つ関数

データベースに格納されているデータは、必ずしもきれいな状態であるとは限りません。ユーザー入力の揺れ、過去のデータ形式の不統一など、様々な要因でデータは「汚れて」います。

文字列関数は、こうしたデータの整形や正規化に非常に役立ちます。

大文字・小文字の統一:UPPER関数とLOWER関数

UPPER関数やLOWER関数は、文字列をすべて大文字または小文字に変換します。

これは、検索時の大文字・小文字の区別をなくしたい場合や、データを比較する前に統一したい場合に非常に便利です。

例えば、ユーザー名が「Tanaka」「tanaka」「TANAKA」のように混在している場合、LOWER関数を使ってすべて小文字に変換することで、一意に識別できるようになります。

SELECT LOWER(user_name) AS normalized_user_name
FROM users;

前後の空白除去:TRIM, LTRIM, RTRIM関数

TRIM関数は、文字列の先頭および末尾にある空白文字(スペース、タブ、改行など)を削除します。

LTRIMは先頭のみ、RTRIMは末尾のみの空白を削除します。

ユーザーが意図せず入力してしまう空白は、データの一貫性を損なう原因となります。

例えば、' SQL Quest 'という文字列は、TRIM関数を適用することで'SQL Quest'となります。

SELECT TRIM('   Hello World   ') AS trimmed_string;

実行結果:

trimmed_string
-------------
Hello World

この関数は、特に外部から取り込んだデータや、手入力によるデータに対して、クレンジング処理を行う際に頻繁に利用されます。

文字列の結合:CONCAT関数(または||演算子)

CONCAT関数(または多くのデータベースでサポートされている||演算子)は、複数の文字列を結合します。

これは、例えば、姓と名が別々のカラムに格納されている場合に、それらを結合して氏名として表示したい場合などに使用されます。

SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM employees;

-- または || 演算子を使用
SELECT first_name || ' ' || last_name AS full_name
FROM employees;

この関数を応用すると、固定の文字列とカラムの値を組み合わせた、よりリッチな表示を作成することも可能です。

例えば、「ユーザー名: [ユーザー名]」のような形式で表示したい場合などに使えます。

より複雑なデータ操作への応用

これまで見てきた関数は、単体でも強力ですが、これらを組み合わせることで、さらに高度なデータ操作が可能になります。

複合的な条件での検索

WHERE句で複数の条件を組み合わせる際に、文字列関数が活躍します。

例えば、「メールアドレスが'@example.com'で終わるユーザーのうち、名前が'A'で始まるユーザー」を検索したい場合を考えてみましょう。

SELECT user_id, email, name
FROM users
WHERE email LIKE '%@example.com'
  AND name LIKE 'A%';

ここで、もしメールアドレスのドメイン部分を正規化したい、あるいは名前に含まれる特定の記号を除去したいといった追加の要件があれば、REPLACE関数やLOWER関数などをWHERE句やSELECT句で組み合わせて使用することになります。

データ分析における文字列操作

ログデータやテキストデータなど、文字列形式で記録されたデータを分析する際にも、文字列関数は不可欠です。

例えば、Webサイトのアクセスログから、特定のURLパターンに一致するアクセスのみを抽出したり、ユーザーのコメントから特定のキーワードの出現頻度をカウントしたりする際に、LIKE演算子やSUBSTRING関数、そして将来的に正規表現関数などが活用されます。

-- 特定のパス '/products/' を含むURLのみを抽出
SELECT url
FROM access_logs
WHERE url LIKE '%/products/%';

さらに、これらの抽出結果を集計する際には、GROUP BY句と組み合わせて、例えば「どの商品カテゴリへのアクセスが最も多いか」といった分析を行うことができます。

まとめ

SQLの文字列関数は、単なるデータ整形にとどまらず、複雑な検索条件の設定、データクリーニング、そしてデータ分析まで、幅広い場面でその真価を発揮します。

REPLACEUPPERLOWERTRIMといった関数を使いこなすことで、データの質を向上させ、より精度の高い分析や、堅牢なアプリケーション開発が可能になります。

今回紹介した関数やテクニックは、SQL学習の初期段階で触れる機会が少ないかもしれませんが、実務では非常に頻繁に利用されます。

ぜひ、これらの知識を習得し、SQLによるデータ操作の幅を広げていきましょう。


QSQL Quest