0

次のような文字列があります。

set @s1 = '#12 + #13 - #14 * 3'

文字列のすべての #XXX 部分を見つけて、最終的な文字列が次のようになるように置き換えるにはどうすればよいですか。

hashf('12') + hashf('13') - hash('14') * 3 

カーソルを使用してみましたが、時間がかかりすぎたため、パフォーマンス上の理由から使用したくありません。

私も試しregexました。パターンはです"#\d+"が、私の場合はどうすれば適用できますか?

4

1 に答える 1

0

私は解決策を見つけました:

DECLARE @s1 VARCHAR(max) 
DECLARE @length INT 
DECLARE @current INT 

SET @s1 = '#12 + #13 - #14 * 3' 
SET @length = Len(@s1) 
SET @current = 0 

DECLARE @returned_value VARCHAR(max) 

WHILE ( @current < @length ) 
  BEGIN 
      SET @current = Charindex('#', @s1, @current) 
      SET @s1 = Stuff(@s1, Charindex('#', @s1, @current) , 1, 'func1(''') 
      SET @s1 = Stuff(@s1, Charindex(' ', @s1, @current) , 1, ''') ') 
      SET @length = Len(@s1) 
      SET @current = Charindex('#', @s1, @current) 

      IF @current = 0 
        BEGIN 
            SET @current = @length 
        END
  END
SELECT @s1
于 2013-05-13T17:51:12.807 に答える