SQL Server 囲み文字内のテキストを抽出する

SQL

意外とややこしかったので、まとめておきます。
【】内のテキストを抽出します。

サンプルコード

DECLARE @text NVARCHAR(MAX) = 'これは【サンプルテキスト】です。ここに【別のテキスト】があります。';

-- 最初の【の位置を取得
DECLARE @start INT = CHARINDEX('【', @text) + 1;
-- 最初の】の位置を取得
DECLARE @end INT = CHARINDEX('】', @text, @start);

-- 【】に囲まれたテキストを抽出
DECLARE @extracted NVARCHAR(MAX) = SUBSTRING(@text, @start, @end - @start);

SELECT @extracted AS ExtractedText;

CHARINDEX(‘検索するテキスト’, ‘検索元テキスト’, <検索開始位置>)

CHARINDEXは’検索元テキスト’の一番初めに’検索するテキスト’が出現する位置を返します。
オプションで第3引数に検索開始位置を指定できるのが便利ですね。
2つ目の【】内のテキストを抽出したいときなんかにも使えそうですね。
でも、2つ目以降の【】内のテキストを抽出したいときのもっといい方法ありそうですかね。
ぜひコメントで教えてください!

@startで+1をしているのは、CHARINDEX('【', @text) で返される【の位置に+1することで、抽出テキストの開始位置を特定できるためです。

SUBSTRING(‘検索元テキスト’, 抽出開始位置, 抽出文字数)

CHARINDEXで囲み文字の文字位置を取得し、SUBSTRINGで囲み文字内の文字列を取得できるといった算段です。

まとめ

CHARINDEXとSUBSTRINGを駆使して、囲み文字内のテキストを抽出する方法でした。
もっといい方法ありそうなので、見つけたら載せます。
cross applyを使え良さそうなのですが、あまりわかっていないので次回ちゃんと調べよう。

タイトルとURLをコピーしました