SQLServerを使ってデータを扱う際、特定の文字列を抜き出したい場面はよくあります。例えば、以下のようなケースが考えられます。
- メールアドレスのドメイン部分を取得したい(例:
example@domain.com
→domain.com
) - 商品コードからカテゴリ識別子を取り出したい(例:
PRD-12345
→PRD
) - ログデータから特定の識別番号を抽出したい
SQLServerには、SUBSTRING
、CHARINDEX
、PATINDEX
などの文字列操作関数があり、これらを駆使することで簡単に文字列を抜き出すことができます。
本記事では、SQLServerで特定の文字列を抜き出すさまざまな方法を、具体的な例を交えてわかりやすく解説していきます。
文字列を抜き出す基本的な方法
SQLServerには、特定の文字列を抜き出すための便利な関数がいくつか用意されています。ここでは、SUBSTRING
、LEFT
、RIGHT
の基本的な使い方を解説します。
SUBSTRING関数を使う
SUBSTRING
関数は、指定した位置から任意の長さの文字列を取得する関数です。
SUBSTRING(文字列, 開始位置, 文字数)
使用例
以下の例では、'SQLServer'
の3文字目から4文字を抜き出します。
SELECT SUBSTRING('SQLServer', 3, 4) AS 抜き出し結果;
結果
抜き出し結果
------------
LSer
LEFT関数を使う
LEFT
関数は、文字列の左側から指定した文字数分を取得する関数です。
LEFT(文字列, 文字数)
使用例
SELECT LEFT('SQLServer', 3) AS 抜き出し結果;
結果
抜き出し結果
------------
SQL
RIGHT関数を使う
RIGHT
関数は、文字列の右側から指定した文字数分を取得する関数です。
RIGHT(文字列, 文字数)
使用例
SELECT RIGHT('SQLServer', 6) AS 抜き出し結果;
結果
抜き出し結果
------------
Server
この3つの関数を使い分けることで、柔軟に文字列を抽出することができます。次のセクションでは、より高度な検索方法を紹介します。
特定のパターンを抽出する方法
特定のパターンに基づいて文字列を抜き出したい場合、CHARINDEX
や PATINDEX
などの関数が役立ちます。これらを使うことで、特定の文字や文字列の位置を特定し、柔軟なデータ抽出が可能になります。
CHARINDEXを使った文字列抽出
CHARINDEX
は、指定した文字列が対象の文字列内で最初に登場する位置を返す関数です。
CHARINDEX(検索文字列, 対象文字列 [, 開始位置])
使用例:メールアドレスのドメイン部分を取得
メールアドレスから @
の後の部分(ドメイン)を取得する例を見てみましょう。
SELECT SUBSTRING('user@example.com', CHARINDEX('@', 'user@example.com') + 1, LEN('user@example.com')) AS ドメイン;
結果
ドメイン
------------
example.com
CHARINDEX('@', 'user@example.com')
→@
の位置(5)が取得されるSUBSTRING
を使い、その位置の次の文字から末尾までを取得
PATINDEXを使ったパターンマッチング
PATINDEX
は、ワイルドカード(%
)を使ったパターン検索ができる関数です。
PATINDEX('%検索パターン%', 対象文字列)
使用例:英数字の並びを検索
以下の例では、文字列の中から英数字 ([A-Za-z0-9]
) を含む部分の開始位置を検索します。
SELECT PATINDEX('%[A-Za-z0-9]%', ' *** SQLServer') AS 開始位置;
結果
開始位置
------------
6
文字列 ' *** SQLServer'
の6文字目に初めて英数字が登場することがわかる
CHARINDEX + SUBSTRING で柔軟な抽出
CHARINDEX
と SUBSTRING
を組み合わせることで、柔軟なデータ抽出が可能です。
使用例:ファイルパスからファイル名を抽出
SELECT SUBSTRING('C:\Users\Public\report.pdf', CHARINDEX('\', REVERSE('C:\Users\Public\report.pdf')), LEN('C:\Users\Public\report.pdf')) AS ファイル名;
結果
ファイル名
------------
report.pdf
REVERSE
を使い、文字列を逆転させた上で最後の\
の位置を特定- その位置から
SUBSTRING
でファイル名部分を取得
まとめ
本記事では、SQL Serverで特定の文字列を抜き出す方法について解説しました。以下のポイントを押さえておくと、文字列処理を効率的に行うことができます。
✅ 文字列の一部を抜き出す基本的な関数
SUBSTRING(文字列, 開始位置, 長さ)
→ 任意の位置から指定の長さの文字列を取得LEFT(文字列, 長さ)
→ 先頭から指定した文字数を取得RIGHT(文字列, 長さ)
→ 末尾から指定した文字数を取得
✅ 特定のパターンを元に抽出する方法
CHARINDEX(検索文字列, 対象文字列)
→ 文字の位置を取得し、SUBSTRING
と組み合わせて部分抽出PATINDEX('%パターン%', 対象文字列)
→ ワイルドカードを使った柔軟な検索REVERSE(文字列)
→ 文字列を逆順にして、CHARINDEX
と組み合わせることで末尾側からの検索も可能
✅ よくある用途と活用例
- メールアドレスのドメイン部分を取得
- ファイルパスからファイル名を抜き出す
- 特定の記号を基準にした文字列の分割
SQL Serverの文字列処理関数を活用すれば、データの抽出・加工がより簡単に行えます。データ処理の効率化のためにも、ぜひこれらのテクニックを活用してみてください!
コメント