none
ある文字列に等間隔で文字を挿入する方法を教えてください RRS feed

  • 質問

  • 文字列(または数字)があり別フィールドに等間隔に文字をいれた文字列をつくりたいのですが

    方法を教えてください。

    例> 数字 [123456789] があったとすると[123,456,789] の文字列を作り取得する

    DATA

    123456789

    abcdefg

    の時

    SELECT DATA,DATA1

    FROM DATA

    でSQLコードを作成した場合

    DATA DATA1

    123456789 123,456,789

    abcdefg abc,defg

    にて、取得したいのです。


    2016年11月3日 2:12

回答

  • SQL Server上にその関数を定義します。SQL Server Mangement Studioを利用されているのでしたら、新たにクエリウインドウを開き、私が掲載したコード(CREATE FUNCTIONで始まるコード)をコピーして貼り付けて実行して下さい。
    そうすると、SQL Server上に新たに等間隔文字挿入という関数が出来上がり、それをSelect文等で使用できるようになります。

    (参考)
    Transact-SQL 入門
    https://www.microsoft.com/ja-jp/server-cloud/local/sqlserver/2012/technology/self-learning.aspx

    の97ページ「ユーザー定義関数」。
    この資料はSQL Server 2012に関するものですが、基本的な機能になりますので、他のバージョンにも適合します。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    • 回答の候補に設定 星 睦美 2016年11月21日 1:13
    • 回答としてマーク MetalDragoon 2016年11月22日 0:35
    2016年11月18日 6:59

すべての返信

  • 以下のような関数を作成して利用する方法があります。

    CREATE FUNCTION [dbo].[等間隔文字挿入]
    (
        @挿入対象文字列		nvarchar(100),
    	@挿入文字			nvarchar(10),
    	@挿入間隔			int
    )
    returns nvarchar(1000)
    as
    begin
    	declare @加工後文字列	nvarchar(1000)
    
    	set @加工後文字列 = '';
    
    	while (len(@挿入対象文字列) > @挿入間隔)
    	begin
    		set @加工後文字列 += left(@挿入対象文字列, @挿入間隔) + @挿入文字;
    		set @挿入対象文字列 = stuff(@挿入対象文字列, 1, @挿入間隔, '');
    	end
    
    	return iif(@挿入対象文字列 = '',  @加工後文字列, @加工後文字列 + @挿入対象文字列);
    end

    使用例
    select DATA , 等間隔文字挿入(DATA, ',', 3) as DATA1 from DATA


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/



    • 編集済み trapemiya 2016年11月4日 3:09 使用例を修正
    • 回答の候補に設定 miyamamMicrosoft employee 2016年11月6日 3:06
    • 回答としてマーク 星 睦美 2016年11月8日 4:34
    • 回答としてマークされていない 星 睦美 2016年11月21日 1:13
    2016年11月4日 3:06
  • VisualStudio を使用しています。

    教えてもらった関数と

    「CREATE FUNCTION SQL コンストラクトまたはステートメントはサポートされていません。」

    というエラーが発生して使えませんでした。



    2016年11月18日 6:09
  • SQL Server上にその関数を定義します。SQL Server Mangement Studioを利用されているのでしたら、新たにクエリウインドウを開き、私が掲載したコード(CREATE FUNCTIONで始まるコード)をコピーして貼り付けて実行して下さい。
    そうすると、SQL Server上に新たに等間隔文字挿入という関数が出来上がり、それをSelect文等で使用できるようになります。

    (参考)
    Transact-SQL 入門
    https://www.microsoft.com/ja-jp/server-cloud/local/sqlserver/2012/technology/self-learning.aspx

    の97ページ「ユーザー定義関数」。
    この資料はSQL Server 2012に関するものですが、基本的な機能になりますので、他のバージョンにも適合します。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    • 回答の候補に設定 星 睦美 2016年11月21日 1:13
    • 回答としてマーク MetalDragoon 2016年11月22日 0:35
    2016年11月18日 6:59
  • フォーラム オペレーターの星 睦美です。MetalDragon さん、返信ありがとうございます。

    私のほうでtrapemiya さんからの返信を[回答の候補に設定] しています。回答として参考になりましたら、MetalDragon さんから[回答としてマーク] をお願いします。



    フォーラム オペレーター 星 睦美 - MSDN Community Support

    2016年11月21日 1:18