文字列関数

文字列関数 とは

SQLで文字列を操作するための便利な関数を、サンプルコードを動かしながら学びます。本レッスンでは、文字列関数 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

なぜ重要か

実務で扱うデータには、生のままでは使いにくい文字列がたくさんあります。たとえば「全角スペース混じりの氏名」「英大文字小文字が混在した メールアドレス」「電話番号が 090-1234-5678 形式と 09012345678 形式に分かれて入っている」「コードに余計な空白が付いている」などです。これらをアプリケーション側で全部正規化するより、SQL の文字列関数で必要な部分だけ整形・抽出してから受け取った方が、コードがシンプルになります。データクレンジング、レポート用ラベル作成、検索フィルタの正規化など、SQL の文字列関数は驚くほど活躍する場面が多いです。

このレッスンでは、汎用 SQL でよく使う代表的な文字列関数の使い方を学びます。

代表的な文字列関数

PostgreSQL / PGlite で使える主要な文字列関数は次のとおりです。

SQL クエリ

SELECT LENGTH('hello world') AS len, -- 11 UPPER('hello') AS up, -- 'HELLO' LOWER('HELLO') AS lo, -- 'hello' TRIM(' hello ') AS trimmed, -- 'hello' SUBSTRING('hello' FROM 2 FOR 3) AS sub, -- 'ell' REPLACE('hello', 'l', 'L') AS rep, -- 'heLLo' CONCAT('hello', ' ', 'world') AS cc; -- 'hello world'

もう一つ便利なのが || 演算子で、PostgreSQL では文字列連結に使えます。CONCAT と違って NULL が含まれると結果も NULL になる点に注意。

SQL クエリ

SELECT 'hello' || ' ' || 'world' AS greeting; -- 'hello world' SELECT 'a' || NULL AS x; -- NULL

どこで使うか

文字列関数は SELECT 句で結果列を整形するときに加え、WHERE 句で条件に使うことも、ORDER BY のキーに使うこともできます。

diagram (will load when visible)

たとえば「メールのドメイン部分でグループ化」「氏名の最初の 1 文字でグループ化」のように、文字列関数で取り出した部分を集計キーにする使い方もあります。

代表例 1 メールアドレスの正規化

メールアドレスが大文字小文字混在で入っているとき、表示用に小文字に揃え、前後の空白を取り除きます。

SQL クエリ

SELECT id, LOWER(TRIM(email)) AS normalized_email FROM users;

TRIM で前後の空白を削除し、LOWER で小文字に揃えるのは検索やバリデーションの定番テクです。

代表例 2 部分文字列の抽出

商品コードの先頭 3 文字をカテゴリコードとして取り出します。

SQL クエリ

SELECT code, SUBSTRING(code FROM 1 FOR 3) AS category_code FROM products ORDER BY category_code, code;

PostgreSQL / PGlite では SUBSTRING(文字列 FROM 開始位置 FOR 長さ) 形式が標準です。MySQL では SUBSTRING(文字列, 開始位置, 長さ) のように書きます。書き方の違いを覚えておくと移植しやすいです。

メールやコードを比較するときは、LOWER(TRIM(...)) で正規化してから比較する。データ品質の高い検索を作る基本テクです。

代表例 3 連結とラベル作成

レポート用に「氏名 (会社名)」のような文字列を作るには連結します。

SQL クエリ

SELECT name || ' (' || company || ')' AS display_label FROM users;

会社名が NULL のユーザの場合、|| だと結果も NULL になってしまうので、COALESCE(company, '無所属') で埋めると安全です。

文字列の前後に「余計な空白が混ざっていないか」は、データ取込み直後に必ずチェックすべき項目です。1 文字の空白でも検索結果がゼロ件になり、ユーザに大きな影響を与えることがあります。

関数の組み合わせ

文字列関数 はネストして組み合わせるのが基本です。

SQL クエリ

SELECT UPPER(SUBSTRING(name FROM 1 FOR 1)) || LOWER(SUBSTRING(name FROM 2)) AS proper FROM users;

これで「最初の 1 文字を大文字、残りを小文字」という英語の固有名詞っぽいフォーマットになります。実務では関数の組み合わせで複雑な整形を行うことが多いです。

まとめ

  • LENGTH / UPPER / LOWER / TRIM / SUBSTRING / REPLACE / CONCAT が代表格
  • || は PostgreSQL の連結演算子。NULL が含まれると結果も NULL
  • 検索やバリデーションは LOWER(TRIM(...)) で正規化するのが基本
  • 文字列関数は WHERE / ORDER BY / GROUP BY のキーにも使える

次のレッスン

次は GROUP BYでグループ化 です。GROUP BY句を使ってデータをグループ化する方法を学びます。集計処理の基本をマスター!

事前確認 — 進む前に次の 3 つができることを確認しましょう。

  1. 文字列関数 の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. 文字列関数 とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

テーブル構造

schema.sql

CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(30) NOT NULL, email VARCHAR(80) NOT NULL ); INSERT INTO users (id, name, email) VALUES (1, '田中太郎', ' Taro.Tanaka@Example.com '), (2, '佐藤花子', 'HANAKO.SATO@example.com'), (3, '鈴木一郎', ' ICHIRO@example.COM'), (4, '高橋美咲', 'misaki.takahashi@EXAMPLE.com '), (5, '伊藤健太', 'KENTA.ITO@example.com');

期待される出力

ヒント

query.sql
query.sql
学習モード
コードの実行結果
データベースを初期化中...