言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

  1. トップページ
  2. SQL辞典
  3. UPPER / LOWER / REPLACE

UPPER / LOWER / REPLACE

対応: SQL-92(1992)

文字列を大文字・小文字に変換したり、特定の文字列を別の文字列に置き換えるための関数です。データの正規化やクレンジングによく使われます。

構文

『UPPER』: 文字列をすべて大文字に変換します。

UPPER(str)
UCASE(str)  -- MySQLでの別名

『LOWER』: 文字列をすべて小文字に変換します。

LOWER(str)
LCASE(str)  -- MySQLでの別名

『REPLACE』: 文字列内の指定した部分を別の文字列に置き換えます。

REPLACE(str, from_str, to_str)

構文一覧

関数概要
UPPER(s)文字列内のアルファベットをすべて大文字に変換します。日本語には影響しません。
LOWER(s)文字列内のアルファベットをすべて小文字に変換します。日本語には影響しません。
REPLACE(s, from, to)文字列s内の検索文字列をすべて置換文字列に置き換えます。大文字小文字を区別します(MySQLは照合順序依存)。

サンプルコード

以下の『customers』テーブルを例に説明します。

customers email Ayanami.Rei@Example.com ayanami.rei@example.com SHINJI@EXAMPLE.COM 3 rows in set

メールアドレスを小文字に正規化して重複を検出します。

sample_upper_lower_replace.sql
SELECT
    LOWER(email) AS normalized_email,
    COUNT(*) AS count
FROM customers
GROUP BY LOWER(email)
HAVING COUNT(*) > 1;
+------------------------+-------+
| normalized_email       | count |
+------------------------+-------+
| ayanami.rei@example.com| 2     |
+------------------------+-------+
1 row in set

メールアドレスを大文字に変換して表示します。

sample_upper_lower_replace.sql
SELECT
    email,
    UPPER(email) AS upper_email
FROM customers;
+------------------------+------------------------+
| email                  | upper_email            |
+------------------------+------------------------+
| Ayanami.Rei@Example.com| AYANAMI.REI@EXAMPLE.COM|
| ayanami.rei@example.com| AYANAMI.REI@EXAMPLE.COM|
| SHINJI@EXAMPLE.COM     | SHINJI@EXAMPLE.COM     |
+------------------------+------------------------+
3 rows in set

旧ドメインを新ドメインに一括置き換えします。

sample_upper_lower_replace.sql
UPDATE employees
SET email = REPLACE(email, 'old-company.com', 'new-company.com')
WHERE email LIKE '%@old-company.com';
Query OK, 5 rows affected (0.02 sec)
Rows matched: 5  Changed: 5  Warnings: 0
SELECT email FROM employees WHERE email LIKE '%@new-company.com';
+------------------------------+
| email                        |
+------------------------------+
| rei@new-company.com          |
| shinji@new-company.com       |
| asuka@new-company.com        |
| misato@new-company.com       |
| kaworu@new-company.com        |
+------------------------------+
5 rows in set

大文字小文字が混在するドメインを正規化します。

sample_upper_lower_replace.sql
UPDATE customers
SET email = REPLACE(email, 'Example.com', 'example.com')
WHERE email LIKE '%Example.com';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0
SELECT email FROM customers;
+-------------------------+
| email                   |
+-------------------------+
| Ayanami.Rei@example.com |
| ayanami.rei@example.com |
| SHINJI@EXAMPLE.COM      |
+-------------------------+
3 rows in set

データベース別の書き方

MySQL / MariaDB

『UPPER』『LOWER』『REPLACE』が使用できます。MySQL独自の別名として『UCASE』『LCASE』もありますが、移植性を考慮する場合は『UPPER』『LOWER』を使ってください。

SELECT UPPER(email), LOWER(email) FROM customers;
SELECT REPLACE(email, 'Example.com', 'example.com') FROM customers;

PostgreSQL

『UPPER』『LOWER』『REPLACE』は MySQL と共通して使用できます。

SELECT UPPER(email), LOWER(email) FROM customers;
SELECT REPLACE(email, 'Example.com', 'example.com') FROM customers;

SQLite

『UPPER』『LOWER』『REPLACE』は SQLite でも使用できます。ただし SQLite の『UPPER』『LOWER』はASCIIのアルファベットのみに対応しており、マルチバイト文字には効果がありません。

SELECT UPPER(email), LOWER(email) FROM customers;
SELECT REPLACE(email, 'Example.com', 'example.com') FROM customers;

概要

『UPPER』と『LOWER』はアルファベットの大文字小文字を変換しますが、日本語には影響しません。大文字小文字を区別せずに検索するには、WHERE句で UPPER または LOWER を使って正規化してから比較するか、データベースの照合順序(COLLATION)を大文字小文字区別なし(case-insensitive)に設定する方法があります。

『REPLACE』は検索文字列のすべての出現箇所を置き換えます。MySQLのREPLACEは照合順序によって大文字小文字を区別するかどうかが変わります。バイナリ照合順序では厳密に一致する文字列だけを置き換えます。

文字列の結合・長さ取得は『CONCAT / LENGTH』を、部分文字列の取り出し・空白除去は『SUBSTRING / TRIM』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。