SQLで文字列を3分割する

どうしてもSQLServerで特定の文字で文字列を3分割する必要があったので、調査しました。

スポンサーリンク

SQLで文字列を3分割する

どうしてもSQLServerで特定の文字で文字列を3分割する必要があったので、調査しました。

せっかくなのでメモ書きです。

【2021.02.25追記】
SQLServer2016以降にはSTRING_SPLIT関数が追加されたので、文字列を指定した文字で分解することはできるようになっています。

SQLServerのSTRING_SPLITで指定した文字で文字列を分解する方法
SQLServer2016以降では指定された文字で文字列を分解して取得するにはSTRING_SPLITを使えば簡単に行うことができます。ただし、取得されるSELECT文のカラム名はvalueに固定されています。

関数が無いので自作する

そもそも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を駆使です。
関数かストアドプロシジャなどにしておけば使いまわしができます。

スポンサーリンク
スポンサーリンク
SQL学習におすすめの本
SQL Server
スポンサーリンク
ソフトウェア開発日記
タイトルとURLをコピーしました