トップ回答者
ある文字列に等間隔で文字を挿入する方法を教えてください

質問
-
文字列(または数字)があり別フィールドに等間隔に文字をいれた文字列をつくりたいのですが
方法を教えてください。
例> 数字 [123456789] があったとすると[123,456,789] の文字列を作り取得する
DATA
123456789
abcdefg
の時
SELECT DATA,DATA1
FROM DATA
でSQLコードを作成した場合
DATA DATA1
123456789 123,456,789
abcdefg abc,defg
にて、取得したいのです。
- 編集済み MetalDragoon 2016年11月3日 2:16
回答
-
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
すべての返信
-
以下のような関数を作成して利用する方法があります。
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
-
VisualStudio を使用しています。
教えてもらった関数と
「CREATE FUNCTION SQL コンストラクトまたはステートメントはサポートされていません。」
というエラーが発生して使えませんでした。
- 編集済み MetalDragoon 2016年11月18日 7:07
-
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