|
我的桌子上有一个方程式。我一次要提取一个方程式,并希望将所有运算符替换为其他任何字符。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 |
|