プレフィックスやサフィックスを取得する
目的とする文字列が「社長」だったとして、「副社長」の「副」*1を取得したり「社長代理」の「代理」*2を取得することを考えます。
取得元の文字列には目的とする文字列が必ず含まれるとして、プレフィックスとサフィックスの両方は含まれないとします。
下記のコードで@all_valueは取得元の全体文字列、@fix_valueは目的とする固定文字列です。
まずは簡単なサフィックス
固定文字列よりも長い部分がサフィックスなので簡単です。
/* GetSuffix: サフィックスを取得する ■実行例 dbo.GetSuffix('社長代理', '社長') = '代理' */ CREATE FUNCTION [dbo].[GetSuffix] ( @all_value varchar(8000), @fix_value varchar(8000) ) RETURNS varchar(8000) AS BEGIN RETURN SUBSTRING(@all_value, LEN(@fix_value) + 1, LEN(@all_value) - LEN(@fix_value)) END
ちょっと面倒くさいプレフィックス
評価する前に文字列を反転してサフィックス取得処理を行い、結果をまた反転すれば正解が得られます。
/* GetPrefix: サフィックスを取得する ■実行例 dbo.GetPrefix('副社長', '社長') = '副' */ CREATE FUNCTION [dbo].[GetPrefix] ( @all_value varchar(8000), @fix_value varchar(8000) ) RETURNS varchar(8000) AS BEGIN RETURN REVERSE(dbo.GetSuffix(REVERSE(@all_value), @fix_value)) END
プレフィックスとサフィックスの両方を扱うには
PATINDEX関数を使って切り分けないとダメですね。今回は必要なかったので作ってません。