- 締切済み
SQL Server 2000 文字列操作
一つのカラムのデータがカンマ区切りで下記の様になっています。 1111,22222,33,444444,555,66666,7777 このデータの3番目のカンマから4番目のカンマまでの データを抽出したいのですがおわかりになる方教えて頂けませんでしょうか?charindexやsubstringを駆使してとりだそうと思ったのですがうまくいきません。 宜しくお願い致します。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- jamshid6
- ベストアンサー率88% (591/669)
エラーケースまで考慮すると、これくらい複雑になります(文字列を@cとします)。 SELECT CASE WHEN (CHARINDEX(',',@c+',',CHARINDEX(',',@c+',',CHARINDEX(',',@c+',',CHARINDEX(',',@c+',')+1)+1)+1) -CHARINDEX(',',@c+',',CHARINDEX(',',@c+',',CHARINDEX(',',@c+',')+1)+1)-1)>0 THEN SUBSTRING(@c+',', CHARINDEX(',',@c+',',CHARINDEX(',',@c+',',CHARINDEX(',',@c+',')+1)+1)+1, CHARINDEX(',',@c+',',CHARINDEX(',',@c+',',CHARINDEX(',',@c+',',CHARINDEX(',',@c+',')+1)+1)+1) -CHARINDEX(',',@c+',',CHARINDEX(',',@c+',',CHARINDEX(',',@c+',')+1)+1)-1) ELSE '' END こんなのは誰もメンテナンスしたくないと思うので、スカラ関数を1つ書いてみてはどうでしょう。 (カンマ区切りのX番目を抽出する関数) CREATE FUNCTION dbo.SUBSTR_SP(@STR varchar(1000),@SEQ int) RETURNS varchar(1000) AS BEGIN DECLARE @PTR int DECLARE @CTR int DECLARE @PREV int SET @CTR=0 SET @PTR=0 WHILE (@CTR<@SEQ) BEGIN SET @CTR=@CTR+1 SET @PREV=@PTR SET @PTR=CHARINDEX(',',@STR,@PTR+1) IF (@PTR=0) BREAK END IF (@PREV<>0 AND @PTR=0) SET @PTR=LEN(@STR)+1 IF (@PTR-@PREV-1>0) RETURN SUBSTRING(@STR,@PREV+1,@PTR-@PREV-1) RETURN '' END そうすれば、SELECT dbo.SUBSTR_SP(@c,4)という風に使えます。 #2005だったら、別の手もあったのですが。。
お礼
ありがとうございます。 基本的にはこのデータは参考としてカラムに保存していたのですが、 急遽その中の情報が必要となった為ご質問にいたりました。 ありがとうございます。かなり参考になりました。 スカラ関数を検討したいと思います。