34,588
社区成员
发帖
与我相关
我的任务
分享
declare @str varchar(200)
set @str='1,2,3,4,5,6,7'
select b.c from(
select c= CONVERT(xml,'<root><v>' + REPLACE(@str, ',', '</v><v>') + '</v></root>')-- from tb
)a outer apply(
select c= N.v.value('.', 'varchar(10)') from a.[c].nodes('/root/v') N(v)
)b
go
/*
c
----------
1
2
3
4
5
6
7
(7 行受影响)
*/
declare @str varchar(200)
set @str='1,2,3,4,5,6,7'
while(charindex(',',@str)<>0)
begin
print substring(@str,1,charindex(',',@str)-1)
set @str=stuff(@str,1,charindex(',',@str),'')
end
create table tb(c varchar(50))
insert into tb select '88702013,112345678,31321321'
create table tb1(id int,c varchar(50))
insert into tb1 select 1,'88702013'
insert into tb1 select 2,'31321321'
insert into tb1 select 3,'8237593115'
go
select * from tb1 k1 where exists(select 1 from (
--下面这几行是拆分
select b.c from(
select c= CONVERT(xml,'<root><v>' + REPLACE([c], ',', '</v><v>') + '</v></root>') from tb
)a outer apply(
select c= N.v.value('.', 'varchar(100)') from a.[c].nodes('/root/v') N(v)
)b
--到这里,可以独立开来运行了试试
)k2 where c=k1.c)
go
drop table tb,tb1
/*
id c
----------- --------------------------------------------------
1 88702013
2 31321321
(2 行受影响)
*/
create table tb(c varchar(50))
insert into tb select '88702013,112345678,31321321'
create table tb1(id int,c varchar(50))
insert into tb1 select 1,'88702013'
insert into tb1 select 2,'31321321'
go
select * from tb1 k1 where exists(select 1 from (
select b.c from(
select c= CONVERT(xml,'<root><v>' + REPLACE([c], ',', '</v><v>') + '</v></root>') from tb
)a outer apply(
select c= N.v.value('.', 'varchar(100)') from a.[c].nodes('/root/v') N(v)
)b
)k2 where c=k1.c)
go
drop table tb,tb1
/*
id c
----------- --------------------------------------------------
1 88702013
2 31321321
(2 行受影响)
*/
/*按照符号分割字符串*/
create function [dbo].[m_split](@c varchar(2000),@split varchar(2))
returns @t table(col varchar(200))
as
begin
while(charindex(@split,@c)<>0)
begin
insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))
set @c = stuff(@c,1,charindex(@split,@c),'')
-- SET @c = substring(@c,charindex(' ',@c)+1,len(@c))
end
insert @t(col) values (@c)
return
end
/*测试
select * from dbo.m_split('1,2,3,4,5',',')
*/
select * from tb where ','+columnname+',' like ','+@phone+','
create table tb(c varchar(50))
insert into tb select '34,12,532'
go
declare @s varchar(50)
set @s='34'
select * from tb where ','+c+',' like '%,'+@s+',%'
go
drop table tb
/*
c
--------------------------------------------------
34,12,532
(1 行受影响)
*/
declare @canshu varchar(50)
set @canshu='88702013'
if(charindex(','+@canshu+',',','+'88702013,112345678,31321321'+',')>0)
select '存在其中'
declare @canshu varchar(50)
set @canshu='88702013'
if(charindex(','+@canshu+',',','+'88702013,112345678,31321321+',')>0)
select '存在其中'