どうしてもSQLServerで特定の文字で文字列を3分割する必要があったので、調査しました。
SQLで文字列を3分割する
どうしてもSQLServerで特定の文字で文字列を3分割する必要があったので、調査しました。
せっかくなのでメモ書きです。
【2021.02.25追記】
SQLServer2016以降にはSTRING_SPLIT関数が追加されたので、文字列を指定した文字で分解することはできるようになっています。
SQLServerのSTRING_SPLITで指定した文字で文字列を分解する方法
SQLServer2016以降では指定された文字で文字列を分解して取得するにはSTRING_SPLITを使えば簡単に行う...
関数が無いので自作する
そもそもSQLServerには文字列を分割する関数がないようなので、自作を余儀なくされました。
Declare @targetstr varchar(max)='1234|5678|9012' Declare @separator varchar(max)='|' SELECT SUBSTRING( @targetstr, 1, CHARINDEX( @separator, @targetstr ) - 1 ) AS No1 ,SUBSTRING( @targetstr, CHARINDEX( @separator, @targetstr ) + 1 , CHARINDEX( @separator, @targetstr, CHARINDEX( @separator, @targetstr ) + 1 ) - CHARINDEX( @separator, @targetstr ) - 1 ) AS No2 ,SUBSTRING( @targetstr, CHARINDEX( @separator, @targetstr, CHARINDEX( @separator, @targetstr ) + 1 ) + 1, Len( @targetstr ) - CHARINDEX( @separator, @targetstr , CHARINDEX( @separator, @targetstr ) + 1 )) AS No3
実行結果は
No1 No2 No3 1234 5678 9012
SUBSTRINGとCHARINDEXを駆使です。
関数かストアドプロシジャなどにしておけば使いまわしができます。