日期:2014-05-18  浏览次数:20536 次

在线求一个SQL语句
我有一个字段,假设为TYPE,里面的值是这样的:

9,A4,0|10,A6,0|15,T7,0|20,TS,0|

现求SQL语句实现以下功能:

传入一个值,

假设为TS,我要取得相对应的值是:

20,TS,0里面的20.

假设为A6,我要取得相对应的值是:

10,A6,0里面的10.

谢谢!!

------解决方案--------------------
SELECT left(type,PATINDEX( '%,% ', type)-1)
FROM Table1
WHERE (type LIKE '%a6% ')
------解决方案--------------------
'%a6% ',替换这里的值即可。
------解决方案--------------------
create function fn_fenli( @q nvarchar(20))
returns nvarchar(20)
as
begin
declare @a nvarchar(100)

set @A= '9,A4,0|10,A6,0|15,T7,0|20,TS,0| '
set @A= '| '+@A
declare @b nvarchar(100)
select @b=reverse(substring(@A,1,charindex(@Q,@a)-2))
return reverse(substring(@b,1,charindex( '| ',@b)-1))

end


select dbo.fn_fenli( 'ts '),dbo.fn_fenli( 't7 '),dbo.fn_fenli( 'a4 ')



-------------------- -------------------- --------------------
20 15 9

(1 row(s) affected)

------解决方案--------------------
declare @a varchar(100),@b varchar(10),@Value varchar(10)
set @a= '9,A4,0|10,A6,0|15,T7,0|20,TS,0 '
set @b= 'TS '

select top 100 id=identity(int,1,1) ,1 a into # from syscolumns

select @Value=left(aa,charindex( ', '+@b,aa)-1) from
(select substring(@a+ '| ',id,charindex( '| ',@a+ '| ',id+1)-id) aa
from #
where substring( '| '+@a,id,1)= '| '
)T where charindex( ', '+@b,aa)> 0

select @Value
drop table #
------解决方案--------------------
text这样算肯定不行,你的表是什么样的,会不会传一个值进去得到多个记录
------解决方案--------------------
字段类型是什么

------解决方案--------------------
declare @T varchar(500)
declare @Ti varchar(10)
declare @T_SQL varchar(8000)
set @T= '9,A4,0|10,A6,0|15,T7,0|20,TS,0| '
set @Ti= 'T7 '
if charindex( '| ',@T)=1
set @T=STUFF(@T,1,1, ' ')

if charindex( '| ',REVERSE(@T))=1
set @T=REVERSE(STUFF(REVERSE(@T),1,1, ' '))

set @T_SQL= ' '
select @T_SQL= 'select left(A,charindex( ' ', ' ',A)-1) from (select ' ' ' + REPLACE(@T, '| ', ' ' ' as ' 'A ' ' union all select ' ' ') + ' ' ' as ' 'A ' ') T where charindex( ' ' '+ @Ti + ' ' ',A)> 0 '
print @T_SQL
exec (@T_SQL)
------解决方案--------------------
create function fn_fenli( @q nvarchar(20))
returns nvarchar(20)
as
begin
declare @a nvarchar(100),@b nvarchar(100)
select @A= ' ',@b= ' '

select @A=Convert(nvarchar(4000),TYPE)
from table1
where charindex(@q,Convert(nvarchar(4000),TYPE))> 0


if @A <> ' '
begin
set @A= '| '+@A

select @b=reverse(substring(@A,1,charindex(@Q,@a)-2))
select @b=reverse(substring(@b,1,charindex( '| ',@b)-1))
end