SQL Server - 最後に出現する文字列のインデックス位置 (LastIndexOf) や、その左側や右側の文字列を取り出す方法
最後に出現する文字列のインデックス位置やその左側や右側の文字列を取り出す方法
T-SQL では、指定した文字列が最初に出現するインデックス位置は CHARINDEX() で取得できますが、最後に出現するインデックス位置を返す、LastIndexOf のような組み込み関数がありません。
ここでは、最後に出現する文字列のインデックス位置の取得方法と、最後に出現する文字列の左側や右側の文字列を取り出す方法をご説明します。
最後に出現する文字列のインデックス位置を取得する (LastIndexOf)
T-SQL で指定した文字列が、最後に出現する文字列のインデックス位置を取得するには、次のようにできます。
DECLARE @StringToSearch VARCHAR(50) = 'ABCDE-FGHIJ-123'; DECLARE @StringToFind VARCHAR(10) = '-' IF CHARINDEX(@StringToFind, @StringToSearch) > 0 BEGIN SELECT LEN(@StringToSearch) - CHARINDEX(@StringToFind, REVERSE(@StringToSearch)) - LEN(@StringToFind) + 2 END ELSE BEGIN SELECT 0; END
@StringToFind が最後の出現位置をさがしたい文字列、@StringToSearch が検索される文字列です。
CHARINDEX(@StringToFind, @StringToSearch) > 0 で @StringToFind が @StringToSearch の中に存在するか確認し、存在しない時は ELSE で 0 を返すようにしています。
存在する時は、REVERSE() を使って @StringToSearch を反対にしてから、CHARINDEX で @StringToFind の最初の出現位置を取得し、@StringToSearch の文字数からその数と、@StringToFind の文字数を引いて、2 を足すことによって、@StringToFind が最後に出現するインデックス位置を取得しています。
[実行結果]
最後に出現する文字列の左側の文字列を取得する
T-SQL で指定した文字列が、最後に出現する文字列の左側の文字列を取得するには、次のようにできます。
DECLARE @StringToSearch VARCHAR(50) = 'ABCDE-FGHIJ-123' DECLARE @StringToFind VARCHAR(10) = '-' IF CHARINDEX(@StringToFind, @StringToSearch) > 0 BEGIN SELECT LEFT(@StringToSearch, LEN(@StringToSearch) - CHARINDEX(@StringToFind, REVERSE(@StringToSearch)) - LEN(@StringToFind) + 1); END ELSE BEGIN SELECT ''; END
@StringToFind が最後の出現位置をさがしたい文字列、@StringToSearch が検索される文字列です。
CHARINDEX(@StringToFind, @StringToSearch) > 0 で @StringToFind が @StringToSearch の中に存在するか確認し、存在しない時は ELSE で空の文字列を返すようにしています。
存在する時は LEFT(文字列, 文字数) を使って、最後に出現する @StringToFind の左側の文字を取り出します。
取得したい文字数は先ほど取得した [最後に出現する文字列のインデックス位置] - 1 になるので、LEN(@StringToSearch) - CHARINDEX(@StringToFind, REVERSE(@StringToSearch)) - LEN(@StringToFind) + 1 になります。
[実行結果]
最後に出現する文字列の右側の文字列を取得する
T-SQL で指定した文字列が、最後に出現する文字列の右側の文字列を取得するには、次のようにできます。
DECLARE @StringToSearch VARCHAR(50) = 'ABCDE--FGHIJ--123' DECLARE @StringToFind VARCHAR(10) = '--' IF CHARINDEX(@StringToFind, @StringToSearch) > 0 BEGIN SELECT RIGHT(@StringToSearch, CHARINDEX(@StringToFind, REVERSE(@StringToSearch)) - 1); END ELSE BEGIN SELECT ''; END
@StringToFind が最後の出現位置をさがしたい文字列、@StringToSearch が検索される文字列です。
CHARINDEX(@StringToFind, @StringToSearch) > 0 で @StringToFind が @StringToSearch の中に存在するか確認し、存在しない時は ELSE で空の文字列を返すようにしています。
存在する時は RIGHT(文字列, 文字数) を使って、最後に出現する @StringToFind の右側の文字を取り出します。
CHARINDEX(@StringToFind, REVERSE(@StringToSearch)) で @StringToSearch を反対にしてから、CHARINDEX で @StringToFind の最初の出現位置を取得すると、その数 - 1 が取得したい文字数になります
[実行結果]
以上、最後に出現する文字列のインデックス位置の取得方法と、最後に出現する文字列の左側や右側の文字列を取り出す方法をご紹介しました。