Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

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

UPPER / LOWER / REPLACE

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

構文
-- UPPER: 文字列をすべて大文字に変換します。
UPPER(文字列)
UCASE(文字列)  -- MySQLでの別名

-- LOWER: 文字列をすべて小文字に変換します。
LOWER(文字列)
LCASE(文字列)  -- MySQLでの別名

-- REPLACE: 文字列内の指定した部分を別の文字列に置き換えます。
REPLACE(文字列, 検索文字列, 置換文字列)
構文一覧
関数概要
UPPER(s)文字列内のアルファベットをすべて大文字に変換します。日本語には影響しません。
LOWER(s)文字列内のアルファベットをすべて小文字に変換します。日本語には影響しません。
REPLACE(s, from, to)文字列s内の検索文字列をすべて置換文字列に置き換えます。大文字小文字を区別します(MySQLは照合順序依存)。
サンプルコード
-- メールアドレスを小文字に正規化して重複を検出します。
SELECT
    LOWER(メールアドレス) AS 正規化メール,
    COUNT(*) AS 件数
FROM 顧客
GROUP BY LOWER(メールアドレス)
HAVING COUNT(*) > 1;

-- 商品コードを大文字に統一してから検索します。
SELECT 商品名, 単価
FROM 商品
WHERE UPPER(商品コード) = UPPER('el0042');

-- 旧ドメインを新ドメインに一括置き換えします。
UPDATE 社員
SET メールアドレス = REPLACE(メールアドレス, 'old-company.com', 'new-company.com')
WHERE メールアドレス LIKE '%@old-company.com';

-- 商品説明内の特定文字を除去します(全角スペースを半角に統一)。
SELECT
    商品名,
    REPLACE(商品説明, ' ', ' ') AS 商品説明_正規化
FROM 商品;
実行結果
-- 重複メールアドレスの検出。
正規化メール                | 件数
----------------------------+------
yamada.taro@example.com     | 2
suzuki@example.com          | 3

-- ドメイン置き換え後の確認。
社員名     | 変更前メール                    | 変更後メール
-----------+---------------------------------+---------------------------
山田 太郎  | yamada@old-company.com          | yamada@new-company.com
鈴木 花子  | suzuki.h@old-company.com        | suzuki.h@new-company.com
データベース別の書き方

『UPPER』『LOWER』『REPLACE』は MySQL・PostgreSQL・Oracle・SQL Server・SQLite で共通して使用できます。

-- 全データベース共通の構文です。
SELECT UPPER(商品コード), LOWER(メールアドレス) FROM 顧客;
SELECT REPLACE(メールアドレス, 'old-company.com', 'new-company.com') FROM 社員;

MySQL の別名関数『UCASE』『LCASE』は MySQL 独自です。他のデータベースでは使用できないため、移植性を考慮する場合は『UPPER』『LOWER』を使ってください。

概要

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

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

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

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