1

以下の関数と出力があります。基本的には、文字列内の特定の文字を検索して他の文字に置き換えることです。たとえば、この文字列では、abcdeに置き換えたいので、、、を指定deして、出力を取得します。として、しかし私が文字列を持っていて、とを置き換えたいと仮定した場合、どうすればこれを達成できますか?xy@input = abcde@find = de@replace = xyabcxyhathtmc

そして、関数でwhileループを使用せずに解決策を見つける必要があります

create  FUNCTION dbo.replace_letters
(
  @Input AS VarChar(1000),
  @Find AS VarChar(100),
  @Replace AS VarChar(100)
)
RETURNS VarChar(1000)
AS
BEGIN
   SELECT @Input = REPLACE(@Input, @Find,@Replace)

   return @input
end

--run
select dbo.replace_letters ('abcde', 'ed', 'dc')
4

3 に答える 3

3

最も簡単な方法は、関数をもう一度実行することです:-)

select dbo.replace_letters(dbo.replace_letters('hat', 'h', 'm'), 't', 'c')
于 2012-08-03T05:29:05.567 に答える
1

実行するだけ

REPLACE(REPLACE('HAT'、'H'、'M')、'T'、'C')を選択します。

SQL Serverは置換機能を提供しますが、なぜ同じタスクを実行するために独自の関数を作成するのですか?

于 2012-08-03T07:00:23.693 に答える
0

これを試してください: @Find の最初の文字を置き換え、@Replace の最初の文字と @Find の 2 番目の文字に置き換え、@Replace の 2 番目の文字に置き換えます。

CREATE  FUNCTION dbo.replace_letters
(
  @Input AS VARCHAR(1000),
  @Find AS VARCHAR(100),
  @Replace AS VARCHAR(100)
)
RETURNS VARCHAR(1000)
AS
BEGIN
   SELECT @Input = REPLACE(REPLACE(@Input, SUBSTRING(@Find,1,1),SUBSTRING(@Replace,1,1)),SUBSTRING(@Find,2,1),SUBSTRING(@Replace,2,1))
   RETURN @input
END

 SELECT dbo.replace_letters('hat','ht','mc')
 SELECT dbo.replace_letters('hahtaahtat','ht','xy')

答えは:

マック

ザクヤアクヤイ

于 2012-08-03T05:47:41.313 に答える