MySQLのUPPER関数の使い方!文字列をすべて大文字に変換する

MySQL

MySQLのUPPER関数は、指定した文字列に含まれるすべてのアルファベット文字を大文字に変換するために使用されます。
データの正規化、検索時の大文字・小文字の区別をなくす(ケースインセンシティブ検索)、レポートの体裁を整えるなど、文字列の操作において非常に役立ちます。

この記事では、UPPER関数の基本的な使い方、NULL値の扱い、他の文字列関数や条件式との組み合わせ、そして使用する際の注意点について解説しています。

UPPER関数の基本的な構文

UPPER関数の基本的な構文は以下の通りです。

UPPER(string)
  • string: 大文字に変換したい元の文字列。カラム名、文字列リテラル、または他の関数から返される文字列を指定できます。

この関数は、string 内の小文字のアルファベット(a-z)を対応する大文字(A-Z)に変換した文字列を返します。
アルファベット以外の文字(数字、記号、日本語など)は変換されず、そのまま保持されます。

UPPER関数の使用例

いくつか具体的な例を見てみましょう。

例1:基本的な変換

SELECT UPPER('Hello World');
-- 結果: 'HELLO WORLD'

この例では、’Hello World’ という文字列のすべてのアルファベット小文字が大文字に変換されています。

例2:数字や記号が含まれる場合

数字や記号は変換されません。

SELECT UPPER('MySQL 8.0_database');
-- 結果: 'MYSQL 8.0_DATABASE'

例3:日本語が含まれる場合

日本語(マルチバイト文字)は変換されません。

SELECT UPPER('こんにちは_MySQL');
-- 結果: 'こんにちは_MYSQL'

例4:NULL値の扱い

入力がNULLの場合、結果も NULLになります。

SELECT UPPER(NULL);
-- 結果: NULL

例5:カラムからの変換

customersテーブルに customer_nameカラムがあり、この名前をすべて大文字で取得したい場合:

SELECT customer_id, UPPER(customer_name) AS uppercase_name
FROM customers
WHERE customer_id = 1;
-- 例: customer_name が 'john doe' の場合 -> 'JOHN DOE'

UPPER関数と他の文字列関数の組み合わせ

UPPER関数は、他の文字列関数や条件式と組み合わせて、より複雑なデータ操作を行うことができます。

例1:大文字・小文字を区別しない検索

ユーザーが入力した検索クエリ(例えば ‘apple’)とデータベースのカラム(例えば ‘Apple’, ‘APPLE’, ‘apple’)を大文字・小文字を区別せずに比較したい場合、両方を大文字に変換してから比較するのが一般的です。

-- products テーブルの product_name を大文字に変換して検索
SELECT product_name, price
FROM products
WHERE UPPER(product_name) = UPPER('apple');
-- 'apple', 'Apple', 'APPLE' のいずれもマッチする

例2:データの正規化

入力されるデータの大文字・小文字が不揃いな場合、データベースに挿入する際にUPPERを使って正規化できます。

INSERT INTO user_roles (user_id, role_name)
VALUES (101, UPPER('admin'));
-- role_name に 'ADMIN' が挿入される

例3:LIKE句でのパターンマッチング

LIKE句と組み合わせて、特定の文字パターンが大文字・小文字を区別せずに存在するかを確認できます。

SELECT product_name
FROM products
WHERE UPPER(product_name) LIKE '%BLUE%';
-- 'Blue', 'blue', 'BLUE' を含むすべての製品名を検索

UPPER関数を使う際の注意点

  • パフォーマンスへの影響: WHERE句の中で UPPER関数を使用すると、インデックスが利用されなくなる可能性があります。これにより、特に大規模なテーブルではクエリのパフォーマンスが低下する恐れがあります。大文字・小文字を区別しない検索を頻繁に行う場合は、以下の代替策を検討してください。
    • 照合順序(Collation)の変更: カラムの照合順序を、大文字・小文字を区別しない(_ci で終わる、例: utf8mb4_unicode_ci)ものに変更する。これが最も推奨される方法です。
    • 別の正規化カラム: データを挿入する際に、常に大文字(または小文字)に変換した値を格納する補助的なカラムを作成し、そのカラムにインデックスを貼る。
  • バイナリ文字列: バイナリ文字列(BINARYVARBINARYBLOB)に対してUPPERを使用すると、予期しない結果になる可能性があります。通常はテキスト文字列(CHARVARCHARTEXT)に対して使用します。
  • UCASE() 関数: UCASEUPPER のシノニム(別名)です。機能はまったく同じなので、どちらを使っても構いません。

まとめ

MySQLの UPPER関数は、文字列内のアルファベットをすべて大文字に変換するシンプルな機能を提供します。
データの正規化や、大文字・小文字を区別しない検索など、多くの場面で役立ちます。

ただし、WHERE 句での使用によるパフォーマンスへの影響を理解し、必要に応じて照合順序の変更や補助カラムの利用を検討することが重要です。
UPPER関数を効果的に活用して、SQLクエリとデータ管理をより効率化しましょう。

コメント