在线求一个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