SQLのTRIM関数を使った文字列操作について、基本的な使い方から実践的なテクニックまでを解説します。データクレンジングやバリデーションに必須の機能ですが、あなたは正しく使いこなせていますか?
SQLで右から何文字を取得するRIGHT関数とSUBSTRING関数の使い方
SQLの文字列操作で重要なRIGHT関数とSUBSTRING関数について、基本的な使い方から実践的な活用方法まで解説します。これらの関数を使いこなせば、データ処理の幅が広がりますが、どのように使い分けるべきでしょうか?
RIGHT関数は、文字列の右端から指定した文字数を取得する最も直感的な方法です。基本的な構文は以下の通りです:
RIGHT(文字列, 取得したい文字数)
具体的な使用例を見てみましょう:
-- メールアドレスのドメイン部分を取得
SELECT RIGHT('example@domain.com', 10) -- domain.com
-- 商品コードの末尾3桁を取得
SELECT RIGHT('PROD-2024-001', 3) -- 001
SUBSTRING関数を使って右端から文字列を取得する場合は、以下のような方法があります:
-- 基本構文
SUBSTRING(文字列, 開始位置, 文字数)
-- 右端から取得する場合
SUBSTRING(文字列, LEN(文字列) - 取得したい文字数 + 1, 取得したい文字数)
実践的な使用例:
-- 電話番号の下4桁を取得
SELECT SUBSTRING('03-1234-5678', LEN('03-1234-5678')-3, 4) -- 5678
-- ファイル拡張子を取得
SELECT SUBSTRING('document.pdf', CHARINDEX('.', 'document.pdf'), 4) -- .pdf
日本語などのマルチバイト文字を扱う場合は、特別な注意が必要です:
-- 日本語文字列の右端3文字を取得
SELECT RIGHT('こんにちは世界', 3) -- は世界
-- バイト単位での取得(SQLサーバーの場合)
SELECT CAST(RIGHT(CAST('こんにちは世界' AS VARBINARY), 6) AS NVARCHAR)
文字コードによって結果が異なる可能性があるため、以下の点に注意が必要です:
大量のデータを処理する場合、関数の選択はパフォーマンスに大きく影響します:
関数 | 使用ケース | パフォーマンス特性 |
---|---|---|
RIGHT | 単純な右端切り出し | 高速・低負荷 |
SUBSTRING | 複雑な文字列操作 | 柔軟性が高い |
以下のような場合は、RIGHT関数を優先的に使用することをお勧めします:
実務でよく使用される具体的なコーディング例を紹介します:
-- 郵便番号の下4桁を取得
SELECT
postal_code,
RIGHT(postal_code, 4) AS area_code
FROM addresses
-- ファイル名から拡張子を除いた部分を取得
SELECT
filename,
LEFT(filename, LEN(filename) - LEN(RIGHT(filename,
CHARINDEX('.', REVERSE(filename))))) AS name_without_ext
FROM files
-- 電話番号を市外局番、市内局番、加入者番号に分割
SELECT
phone_number,
LEFT(phone_number, CHARINDEX('-', phone_number) - 1) AS area_code,
SUBSTRING(
phone_number,
CHARINDEX('-', phone_number) + 1,
CHARINDEX('-', phone_number, CHARINDEX('-', phone_number) + 1)
- CHARINDEX('-', phone_number) - 1
) AS local_code,
RIGHT(phone_number,
LEN(phone_number) - CHARINDEX('-', REVERSE(phone_number))
) AS subscriber_number
FROM contacts
これらの関数を組み合わせることで、より複雑なデータ処理も可能になります:
参考リンク:
SQLServerの文字列関数の詳細な解説
Microsoft公式ドキュメント
マルチバイト文字の処理に関する詳細
PostgreSQL日本語マニュアル