文字列のフォーマットは、データベース操作の基本中の基本です。この記事では、Oracleデータベースの文字列操作に使われるUPPER、LOWER、INITCAPファンクションについて、基礎から応用まで徹底解説します。以下の内容を通して、これらのファンクションをマスターしましょう!
本記事ではSCOTTサンプルスキーマを使用した例で解説します。
SCOTTサンプルスキーマは以下を実行することでインポートおよび使用が可能です。
$ sqlplus / as sysdba
SQL> @?/rdbms/admin/utlsampl.sql
$ sqlplus scott/tiger
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
1. 各ファンクションの基本説明
1-1. UPPERファンクション
UPPERは、文字列全体を大文字に変換します。たとえば、検索条件を大文字で統一する場合や、大文字での表示が必要なレポートで使用されます。
構文
UPPER(string)
例
以下のSQLでは、ename列を大文字に変換して表示します。
SELECT UPPER(ename) AS upper_case_name
FROM scott.emp;
1-2. LOWERファンクション
LOWERは、文字列全体を小文字に変換します。メールアドレスの正規化など、文字列の一貫性を保つために有効です。
構文
LOWER(string)
例
SELECTUPPER(ename), LOWER(ename) AS lower_case_name
FROM scott.emp;
結果
SQL> SELECT UPPER(ename), LOWER(ename) AS lower_case_name
2 FROM scott.emp;
UPPER(ENAM LOWER_CASE
---------- ----------
SMITH smith
ALLEN allen
WARD ward
JONES jones
MARTIN martin
BLAKE blake
CLARK clark
SCOTT scott
KING king
TURNER turner
ADAMS adams
JAMES james
FORD ford
MILLER miller
14 rows selected.
1-3. INITCAPファンクション
INITCAPは、各単語の頭文字を大文字にし、それ以外を小文字に変換します。名前やタイトルのフォーマットに最適です。
構文
INITCAP(string)
例
SELECT ename, INITCAP(ename) AS initcap_name
FROM scott.emp;
結果
SQL> SELECT ename, INITCAP(ename) AS initcap_name
2 FROM scott.emp;
ENAME INITCAP_NA
--------------- ----------
SMITH Smith
ALLEN Allen
WARD Ward
JONES Jones
MARTIN Martin
BLAKE Blake
CLARK Clark
SCOTT Scott
KING King
TURNER Turner
ADAMS Adams
JAMES James
FORD Ford
MILLER Miller
14 rows selected.
2. 業務での具体的な使用例
2-1. データの正規化
データベース内の名前を一貫性のある形式で管理します。
SELECT customer_id, INITCAP(LOWER(customer_name)) AS formatted_name
FROM customers;
このSQLは、すべての顧客名を「先頭文字大文字・それ以外小文字」の形式に統一します。
2-2. 大文字・小文字を区別しない検索
例えば、ユーザーが入力した値を大小文字問わずに検索したい場合に利用します。
SELECT empno,ename,job,deptno
FROM scott.emp
WHERE UPPER(ename) = UPPER('smith');
SQL> SELECT empno,ename,job,deptno
2 FROM scott.emp
3 WHERE UPPER(ename) = UPPER('smith');
EMPNO ENAME JOB DEPTNO
---------- --------------- --------- ----------
7369 SMITH CLERK 20
2-3. ファイル名やコードのフォーマット
ファイル名やコードを一貫して小文字にすることで、ファイルシステムのトラブルを回避できます。
SELECT LOWER(file_name) AS normalized_file_name
FROM documents;
3. 実務での応用ヒント
3-1. パフォーマンスの最適化
UPPERやLOWERを条件や結合に使用すると、インデックスが効かない場合があります。以下の方法で回避可能です。
- 関数ベースインデックスの作成sqlコードをコピーする
CREATE INDEX idx_upper_ename ON scott.emp (UPPER(ename));これにより、UPPER(ename)を使用する条件でも高速な検索が可能になります。 - 計算列(仮想列)の使用 テーブルに仮想列を追加し、そこでフォーマット済みの値を保持します。sqlコードをコピーする
ALTER TABLE employees ADD upper_ename GENERATED ALWAYS AS (UPPER(ename)) VIRTUAL;
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
4. 視覚的な理解: フローチャートで文字列操作を学ぶ
以下の図は、UPPER、LOWER、INITCAPが入力文字列をどのように変換するかを示したものです。
入力: "hello world"
↓
UPPER: "HELLO WORLD"
LOWER: "hello world"
INITCAP: "Hello World"
5. エラーと注意点
5-1. NULLの扱い
いずれのファンクションも、引数にNULLが渡されると結果はNULLになります。
SELECT UPPER(NULL) AS result FROM dual;
結果: NULL
SQL> SELECT UPPER(NULL) AS result FROM dual;
R
-
★NULL
5-2. ロケール依存
大文字・小文字変換の結果は、データベースのロケール設定(NLS_LANG)に依存します。多言語対応の際は、テストが重要です。
6. 実践問題
以下のSQLの出力を予想してみましょう:
SELECT INITCAP('hello WORLD'), LOWER('ORACLE DATABASE'), UPPER(NULL)
FROM dual;
期待される結果
SQL> SELECT INITCAP('hello WORLD'), LOWER('ORACLE DATABASE'), UPPER(NULL)
2 FROM dual;
INITCAP('HE LOWER('ORACLEDA U
----------- --------------- -
Hello World oracle database
まとめ
- UPPER: 大文字変換
- LOWER: 小文字変換
- INITCAP: 頭文字を大文字、それ以外を小文字に変換
これらのファンクションを駆使することで、データの正規化や検索、フォーマットの統一を実現できます。さらに、関数ベースインデックスや仮想列を組み合わせることで、パフォーマンスを向上させることが可能です。
これで、実務でも即戦力となる知識が得られましたね!次にこの記事を参考に、実際のデータベースで試してみましょう。質問やご意見があればぜひお聞かせください!
[参考]
Oracle Database SQL言語リファレンス 19c
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?




コメント