SQLのTRIM関数を使った文字列操作について、基本的な使い方から実践的なテクニックまでを解説します。データクレンジングやバリデーションに必須の機能ですが、あなたは正しく使いこなせていますか?
SQL 特定の文字まで抽出とSUBSTRING関数の使い方と実践例
SQLで文字列から特定の部分を抽出する方法について、SUBSTRING関数やCHARINDEX関数の基本から実践的な使い方まで解説します。データベース処理で必要な文字列操作のスキルを身につけませんか?
SUBSTRING関数は、文字列から特定の部分を抽出するための基本的な関数です。基本的な構文は以下の通りです:
SUBSTRING(文字列, 開始位置, 文字数)
具体的な使用例を見てみましょう:
-- 文字列の先頭から5文字を抽出
SELECT SUBSTRING('SQLデータベース', 1, 5) AS 抽出結果
-- 結果: 'SQLデ'
-- 3文字目から2文字分を抽出
SELECT SUBSTRING('プログラミング', 3, 2) AS 抽出結果
-- 結果: 'グラ'
CHARINDEX関数と組み合わせることで、特定の文字までの部分を抽出できます。以下は実践的な例です:
-- メールアドレスからドメイン部分を抽出
SELECT SUBSTRING(
'example@domain.com',
CHARINDEX('@', 'example@domain.com') + 1,
LEN('example@domain.com')
) AS ドメイン
-- 結果: 'domain.com'
ビジネスでよく使用される文字列抽出のパターンをご紹介します:
-- 電話番号から市外局番を抽出
DECLARE @phone VARCHAR(20) = '03-1234-5678'
SELECT SUBSTRING(@phone, 1, CHARINDEX('-', @phone) - 1) AS 市外局番
-- 商品コードから商品カテゴリを抽出
DECLARE @product_code VARCHAR(10) = 'ABC-12345'
SELECT SUBSTRING(
@product_code,
1,
CHARINDEX('-', @product_code) - 1
) AS カテゴリコード
大量のデータを処理する際のパフォーマンスを考慮した実装方法です:
-- インデックスを活用した効率的な抽出
CREATE INDEX idx_column_name ON table_name(column_name)
-- 部分文字列の抽出を含むクエリの例
SELECT
SUBSTRING(column_name, 1, CHARINDEX('-', column_name) - 1)
FROM table_name
WHERE column_name LIKE 'PREFIX%'
より複雑な文字列操作のための応用テクニックです:
-- 複数の区切り文字がある場合の抽出
DECLARE @text VARCHAR(100) = '商品A|カテゴリB|価格1000'
SELECT
SUBSTRING(
@text,
CHARINDEX('|', @text) + 1,
CHARINDEX('|', @text, CHARINDEX('|', @text) + 1) - CHARINDEX('|', @text) - 1
) AS カテゴリ
-- JSON形式のデータから特定の値を抽出
DECLARE @json VARCHAR(1000) = '{"name": "商品A", "price": 1000}'
SELECT
SUBSTRING(
@json,
CHARINDEX('"name":', @json) + 8,
CHARINDEX('",', @json, CHARINDEX('"name":', @json)) - (CHARINDEX('"name":', @json) + 8)
) AS 商品名