如何用存储过程或是C#代码来实现字符替换?有点复杂
表T:公式换算参数表,固定的只有20个,T02都是字符加上个冒号,
冒号前面最多两个字符,如下面的A1,加冒号是为了作截取标志。
T01[实际值] T02[描述]
----------------------
1 D:dwew
2 E:哈哈
3 A:fk
4 A1:呵呵
...
20 W:总的只有20个
---------------------
现在有一个字符串传入,字符串里规定了只能出现表T中T02字段冒号前面的字符,比如是:
string s1="12+E-D";
string s2="A*5+A1*W";
经和表T比对后把欲得到处理过后的:
s1="12+2-1";即将s1里的E经和表T对比后换成了2,D则换成了1.
s2同理。
如何用存储过程或者是C#代码来实现这一过程。
[最优解释]
--> 测试数据:[TB]
if object_id('[TB]') is not null drop table [TB]
GO
create table [TB]([T01] int,[T02] varchar(14))
insert [TB]
select 1,'D:dwew' union all
select 2,'E:哈哈' union all
select 3,'A:fk' union all
select 4,'A1:呵呵' union all
select 20,'W:总的只有20个'
CREATE PROC p_test(
@input VARCHAR(4000)
)
as
select @input=REPLACE(@input,PARSENAME(REPLACE([T02],':','.'),2),[T01]) from [TB]
SELECT @input
GO
EXEC p_test '12+E-D'
EXEC p_test 'A*5+A1*W'
/*
----------------------------------------------------------------------------------------------------------------
12+2-1
(1 行受影响)
----------------------------------------------------------------------------------------------------------------
3*5+31*20
(1 行受影响)
*/
DROP PROC p_test
drop table [TB]
[其他解释]
读取表到datatable,然后用linq或正则解决
[其他解释]
然后用linq或正则解决?没用过linq,能否写一下哈
[其他解释]
再请教一下:
EXEC p_test 'A*5+A1*W' 这个里面我的A1和A是分开的,执行后要的结果应该是:3*5+4*20,这里应该是A1中的A替换成3了,所以成了31.这个怎么解决呢,如果表TB中的字母没有重复的,比如A和A1或者A2是ok的。