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

这么晚了有人在线么,跪求拼接字符串高手来来来!!
如题 我在页面 返回值 ret = (0000000054000010,0000000119000010);里面值是字符,不是数字,
   我现在先把在ret里面的值作为sql的条件 写成ret=('0000000054000010','0000000119000010') 
   跪求拼接大神了 谢谢~

------解决方案--------------------
declare @s varchar(1000)
set @s='0000000054000010,0000000119000010'
declare @v varchar(1000)
set @v=''

select @v=@v+aaa
from (
select substring(xx,b.number,1) as aaa
from (select @s as xx)a ,master..spt_values b
where b.type='P' and b.number between 1 and len(xx)
)t
where ascii(aaa) between 48 and 57
select @v

/*
00000000540000100000000119000010
*/

------解决方案--------------------
楼主的意思是,从页面中取得的值是0000000054000010,0000000119000010
要按照逗号拆开,作为查询条件,应该是ret in ('0000000054000010','0000000119000010') 吧?

我觉得放在程序中处理可能更简单一些,取得的值按照逗号拆分成一个数据
循环数据,组合成'0000000054000010','0000000119000010'的格式
伪代码应该是
按照C#的写法
string[] strArr=ret.Split(',')
string temp=string.empty;
foreach(string s in strArr)
{
   temp+="'"+s+""'+","
}

末尾会多出来一个“,”,利用字符串的trimEnd(",")可以去掉
出来就成可以直接拼接到sql中的要求了('0000000054000010','0000000119000010')

当然一个问题会有多种写法,我的习惯是程序中处理简单,就在程序中处理,sql处理起来简单,就在sql中处理,

造成的结果就是写程序跟sql的水平都不咋地
------解决方案--------------------

declare @ret varchar(100),@tsql varchar(200)
 
select @ret='(0000000054000010,0000000119000010)' 

select @tsql='select * from [表名] where ret in '
            +replace(replace(replace(@ret,'(','('''),',',''','''),')',''')')

-- 打印
print @tsql
/*
select * from [表名] where ret in ('0000000054000010','0000000119000010')
*/

-- 执行
exec(@tsql)