日期:2014-05-17  浏览次数:20641 次

如何用存储过程或是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或正则解决
------其他解决方案--------------------
引用:
读取表到datatable,然后用linq或正则解决

然后用linq或正则解决?没用过linq,能否写一下哈
------其他解决方案--------------------
引用:
SQL code?1234567891011121314151617181920212223242526272829303132333435363738394041424344--> 测试数据:[TB]if object_id('[TB]') is not null drop table [TB]GOcreate table [TB]([T01] int,[T02] va……

再请教一下:
EXEC p_test 'A*5+A1*W' 这个里面我的A1和A是分开的,执行后要的结果应该是:3*5+4*20,这里应该是A1中的A替换成3了,所以成了31.这个怎么解决呢,如果表TB中的字母没有重复的,比如A和A1或者A2是ok的。