ここから本文です

SQL Server 2005でクエリ作成の質問です

ich********さん

2010/3/213:04:48

SQL Server 2005でクエリ作成の質問です

取得結果の文字列を削除するようなクエリを作ろうとしています
そして、何という文字を削除するかもテーブルに持たせます

テーブル文字列削除前
1.あいうえおん
2.かきくけこん
3.さしすせそん
4.たちつてとん

テーブル削除文字列
1.あいう
2.さしす

と言う二つのテーブルがあった場合に、
結果セットは
1.えおん<------あいうを削除
2.かきくけこん
3.せそん<------さしすを削除
4.たちつてとん

としたいのです
文字を消すだけならReplaceでいけそうなのですが、複数の削除文字列をテーブルから取得する方法が思いつきません
何かいい方法はないでしょうか

閲覧数:
863
回答数:
2
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

ka_********さん

2010/3/213:47:26

1.あいう
2.いうえ
3.さしす
テーブル削除文字列に上記の様に重複するデータがあった時の処理を考慮しなければ。

SELECT
CASE WHEN B.削除文字 IS NULL THEN
A.文字列
ELSE
REPLACE(A.文字列,B.削除文字列,'')
END AS 削除後文字列
FROM 対象テーブル A
LEFT JOIN 削除文字テーブル B
ON
A.文字列 LIKE '%' + B.削除文字列 + '%'

こんな感じでも出来ます。

質問した人からのコメント

2010/3/6 00:21:00

感謝 お二人ともありがとうございます
とりあえず今回は
、「一つの文字列に、削除文字列が2回目に出現した物については削除しない」
となったので、こちらをベストアンサーにさせていただきます

ベストアンサー以外の回答

1〜1件/1件中

gar********さん

編集あり2010/3/214:06:59

スカラー関数を作るか、カーソルを使うか、CLRを書くかしかないと思います。

・スカラー関数を作る例は以下の通り。

CREATE FUNCTION REMVCHAR(@STR varchar(100))
RETURNS varchar(100)
AS
BEGIN;
SELECT @STR=REPLACE(@STR,REMVCHAR,'') FROM REMV;
RETURN @STR;
END;
GO

SELECT dbo.REMVCHAR(FLD) FROM DATA

・カーソルを使う例は以下の通り。

DECLARE @DATA TABLE (FLD varchar(100));
DECLARE @STR varchar(100);
DECLARE C CURSOR FAST_FORWARD LOCAL FOR
SELECT FLD FROM DATA;
OPEN C;
FETCH NEXT FROM C INTO @STR;
WHILE (@@FETCH_STATUS=0)
BEGIN;
SELECT @STR=REPLACE(@STR,REMVCHAR,'') FROM REMV;
INSERT INTO @DATA VALUES (@STR);
FETCH NEXT FROM C INTO @STR;
END;
CLOSE C;
DEALLOCATE C;
SELECT * FROM @DATA;

補足:削除文字列が1行につき最大1個しかヒットしないと分かっている場合は、もう一人の方の方法でできますね。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる