批量字符替换问题,请大家帮忙。

wayne2082 2009-08-15 05:52:56
表A
ID VALUE
1 0
2 1
3 3
4 1
5 2

DECLARE @T NVARCHAR(20)
SET @T='#1=0 AND #2>-5'


我要把@T中的#1用表A中的0替换,#2用表A 中的1替换,
最后结果就是 @T='0=0 AND 1>-5'

请大家帮忙。
...全文
140 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wayne2082 2009-08-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jiangshun 的回复:]
看了半天不知道什么意思?

DECLARE @T NVARCHAR(20)
SET @T='#1=0 AND #2>-5'


这个跟表A有什么关系?@T中的可能还有#3,#4,#5等等
那有怎么跟表A对应?
[/Quote]

#1 用表A中的ID为1的的VALUE,就是0 来替换。
#2 用表A中的ID为2的的VALUE,就是1 来替换。

问题已经被Haiwer解决了。谢谢!
xxmsuper 2009-08-15
  • 打赏
  • 举报
回复

declare @t table(id int,value int)
insert @t
select 1,0 union all
select 2,1 union all
select 3,3 union all
select 4,1 union all
select 5,2

declare @s varchar(20);declare @result varchar(20)
set @s='#1=0 AND #2>-5';set @result='#1=0 AND #2>-5'

select @result=replace(@result,'#'+convert(char(1),id),convert(char(1),value))
from @t where patIndex('%#'+convert(char(1),id)+'%',@s)>0

select @result


--------------------
0=0 AND 1>-5

jiangshun 2009-08-15
  • 打赏
  • 举报
回复
看了半天不知道什么意思?

DECLARE @T NVARCHAR(20)
SET @T='#1=0 AND #2>-5'


这个跟表A有什么关系?@T中的可能还有#3,#4,#5等等
那有怎么跟表A对应?
黄_瓜 2009-08-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 haiwer 的回复:]
引用 2 楼 liangck 的回复:
SQL codeSET@T='#1=0 AND #2>-5';SET@T=REPLACE(REPLACE(@T,'#2','1'),'#1','0');

偷懒呀你
[/Quote]
梁哥被师傅批评了
liangCK 2009-08-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 haiwer 的回复:]
引用 2 楼 liangck 的回复:
SQL codeSET@T='#1=0 AND #2>-5';SET@T=REPLACE(REPLACE(@T,'#2','1'),'#1','0');

偷懒呀你
[/Quote]

被海爷教训了.
昵称被占用了 2009-08-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liangck 的回复:]
SQL codeSET@T='#1=0 AND #2>-5';SET@T=REPLACE(REPLACE(@T,'#2','1'),'#1','0');
[/Quote]
偷懒呀你
--小F-- 2009-08-15
  • 打赏
  • 举报
回复
应该先从表A里面查出id=1,id=2分别对应DECLARE @T NVARCHAR(20)
SET @T='#1=0 AND #2>-5' 里面的#1,#2
然后再用replace替代

感觉楼主给的关联条件不够
wayne2082 2009-08-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liangck 的回复:]
SQL codeSET@T='#1=0 AND #2>-5';SET@T=REPLACE(REPLACE(@T,'#2','1'),'#1','0');
[/Quote]
我要写成动态的,@T中的可能还有#3,#4,#5等等。
昵称被占用了 2009-08-15
  • 打赏
  • 举报
回复
好不容易凑出个能用的

declare @tb table (  
ID int,
VALUE int)
insert @tb select
1, 0
union all select
2, 1
union all select
3, 3
union all select
4, 1
union all select
5, 2

DECLARE @T NVARCHAR(20)

SET @T='#1=0 AND #2>-5'
select @t=replace (@t,'#'+cast(id as varchar(20)),cast(VALUE as varchar(20)))
from @tb
where charindex('#'+cast(id as varchar(20)),@t)>0
print @t

--结果

0=0 AND 1>-5
liangCK 2009-08-15
  • 打赏
  • 举报
回复
SET @T='#1=0 AND #2>-5';

SET @T = REPLACE(REPLACE(@T,'#2','1'),'#1','0');
JonasFeng 2009-08-15
  • 打赏
  • 举报
回复
replace 可以干这个呀。

22,296

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧