文字列関数
文字列関数 とは
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 のキーに使うこともできます。
たとえば「メールのドメイン部分でグループ化」「氏名の最初の 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 つができることを確認しましょう。
- 文字列関数 の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (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');