SHOJI's Code
 仕事や趣味で書いた各種言語のプログラミングコード(エクセルVBA,PHP,C/C++/C#,JavaScript等)、その他雑記。
2017.08<<123456789101112131415161718192021222324252627282930>>2017.10
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

もっとうまく設計すればいいのだろうが、CSV文字列が入った列があって、それを分離して各項目について処理する必要が出てきた。テーブル化すると何かと処理しやすいので、どうにか簡単にCSVからテーブルにできないかと、作ったのが以下。

CREATE FUNCTION CsvToTable
(
@CsvString varchar(MAX)
)
RETURNS TABLE
AS
RETURN
(
WITH Csv(value,remain,pos) AS (
SELECT
CONVERT(varchar(MAX), ''),
@CsvString+',',
CHARINDEX(',', @CsvString+',')
UNION ALL
SELECT
SUBSTRING(remain, 1, pos-1),
SUBSTRING(remain, pos+1, 9999),
CHARINDEX(',', SUBSTRING(remain, pos+1, 9999))
FROM
Csv
WHERE
pos>0
)
SELECT value FROM Csv WHERE value<>''
)



ま、WITH句には再帰回数に制限があるから100個以上は無理だし、残りの文字列を取得する部分でも 9999とか適当だし... (汗

テーマ:プログラミング - ジャンル:コンピュータ
コメント
この記事へのコメント
コメントを投稿する

管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2004-2006 SHOJI, Powered By FC2ブログ all rights reserved.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。