回答

收藏

从字符串中替换多个字符,而无需使用任何嵌套的替换功能

技术问答 技术问答 295 人阅读 | 0 人回复 | 2023-09-13

我的桌子上有一个方程式。我一次要提取一个方程式,并希望将所有运算符替换为其他任何字符。1 ]! F4 w* t+ T% ~& y
输入字符串: (N_100-(6858)*(6858)*N_100/0_2)%N_35+ R  r; k, Z5 |; l& ?7 ^" I
运算符或模式: (+, -, *, /, %, (, ))
, ~2 m. G) Z8 A7 I) m, t. ~8 a& D替换字符: ~
/ R# S6 o- ], N7 H0 C2 L! I输出字符串: ~N_100~~6858~~~6858~~N_100~0_2~~N_35$ C8 f1 K; f. x( C7 |7 k- {- T
我曾尝试使用 嵌套的REPLACE 函数在下面的查询中得到所需的输出:
9 W, y2 m; ~8 ODECLARE @NEWSTRING VARCHAR(100)
( o+ q" y7 O/ H; R. ~7 g6 m0 @- w. WSET @NEWSTRING = '(N_100-(6858)*(6858)*N_100/0_2)%N_35' ;- j- G& x' ?, H% |/ |3 |
SELECT @NEWSTRING = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(* P/ ~4 `' [! f- o: ~# J* A& o
                    @NEWSTRING, '+', '~'), '-', '~'), '*', '~'), '/', '~')+ M" g% q  c' q% x$ Z" m, \
                   , '%', '~'), '(', '~'), ')', '~')+ Q5 j3 P) [# `* F7 R7 Q5 [9 V' X, l
PRINT @NEWSTRING3 R  j& m' e5 r2 Q0 y4 w
输出: ~N_100~~6858~~~6858~~N_100~0_2~~N_35
7 C: ~# H8 U, r, ~6 G1 G如何在不使用嵌套替换功能的情况下替换所有运算符?
  m2 j& z: b3 ~. Y* T6 Q                % L1 a; I2 o9 N3 r3 S
解决方案:
4 x" T1 p$ f: Y% d* R                  K& Y' A+ x, W# W
6 L( z; E- m  ?8 z
  ?% i7 A% @+ O3 J, T: U$ ]7 `
                我创建了一个SPLIT函数来实现此目的,因为我需要多次执行此操作PROCEDURE
7 l' e# O- Q4 u6 ]( G  B7 B分割功能1 I: ^- M9 G- ]" h
create function [dbo].[Split](@String varchar(8000), @Delimiter char(1))       4 x- }% f5 \- g5 S) J+ @
returns @temptable TABLE (items varchar(8000))      
+ M) `. l; I# ~2 y' S, a; H5 yas       1 \5 [7 \4 C* v! k
begin       . W2 F* y9 J4 y' Z0 _
    declare @idx int       ) Q5 z( ?( y9 R8 I" p( @0 M
    declare @slice varchar(8000)
& ?  ^5 e! w; A# h9 c    select @idx = 1       - C- w( L7 C+ p1 R3 o' m  v& ~
        if len(@String)0)  
, p) m8 `4 z8 u+ F* W& r            insert into @temptable(Items) values(@slice)
5 v" o% f6 p6 H* t        set @String = right(@String,len(@String) - @idx)       $ Q4 n6 l: i3 G( V6 C6 x
        if len(@String) = 0 break      
8 Q) q* A' Q. A* @+ K0 c% o    end   7 Q+ [: ?5 t' |
return      
3 ?4 w6 X+ {" B, N; b* M; zend
- o% g7 A. ~+ D+ v8 g. G4 U; i! j7 E9 I过程中使用的代码:! K" l$ l1 W4 I2 P9 B. g% w- b
DECLARE @NEWSTRING VARCHAR(100)
8 X( ], T0 a* E  ~SET @NEWSTRING = '(N_100-(6858)*(6858)*N_100/0_2)%N_35' ;
2 @8 D1 g) Q5 {9 x+ ?9 o& U! m- m  KSELECT @NEWSTRING = REPLACE(@NEWSTRING, items, '~') FROM dbo.Split('+,-,*,/,%,(,)', ',');
6 k: g. e/ N" _$ h( b# c! |PRINT @NEWSTRING+ k/ W; \$ j7 C3 _
输出
! H! @  a( X: M+ j, I+ Y1 U~N_100~~6858~~~6858~~N_100~0_2~~N_35
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则