求一SQL的寫法[看誰最快]

Micao_tong 2009-04-08 11:56:03
後台:比如我的[k_za01]表中的字段"z001"的值為PO0901001;PO0901002;PO0901018內也有可能含有5個或更多個逗號;
前台:文本控件,txt_z001的值為PO0901017;PO0901001(";"也可以有多個)
而而我想用一條語句查找看txt_z001
值是否在k_za01表的字段z001讀到.
比如上面“PO0901001”在"z001"是有的,但是不知道這個語句應該如何寫?請各位指導指導..
...全文
245 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
Micao_tong 2009-04-09
  • 打赏
  • 举报
回复
謝謝各位高手光臨本處,解題。
馬上結貼
zzxap 2009-04-08
  • 打赏
  • 举报
回复
UNION 的效率并不比or高
zzxap 2009-04-08
  • 打赏
  • 举报
回复
[code=C#]


string b=txt_z001.text.trim.Tostring().replace(";",";")
string[] a=b.split(";")
int num=a.length
string sql="select * from [k_za01] where ','+ z001 +',' like '%,"+ a[0] +",%' "
FOR ( int i=1,i<num,i++)
{
sql+=" or ','+ z001 +',' like '%,"+ a[i] +",%' "
}


cmd.executeread(sql,conn)
[/CODE]
热学沸腾56 2009-04-08
  • 打赏
  • 举报
回复
学习。。
wuyq11 2009-04-08
  • 打赏
  • 举报
回复
在sql存储过程中通过函数分割k_za01,查询值是否在
opou 2009-04-08
  • 打赏
  • 举报
回复
学习了
  • 打赏
  • 举报
回复
ding~
zzxap 2009-04-08
  • 打赏
  • 举报
回复
[code=C#]

string b=txt_z001.text.trim.Tostring().replace(";",";")
string[] a=b.split(";")
int num=a.length
string sql="select * from [k_za01] where 1=1"
FOR ( int i=0,i<num,i++)
{
sql+=" or ','+ z001 +',' like '%,"+ a[i] +",%' "
}

cmd.executeread(sql,conn)
[/CODE]
cyz9977 2009-04-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 takako_mu 的回复:]
詳見樓下
[/Quote]

暈死了~~怎么都沒人寫啊~~我還想看看呢~~

去sql區找找吧,一大堆的~~~
itcrazyman 2009-04-08
  • 打赏
  • 举报
回复
一条语句写好像比较难吧,
1种方法是在前台把txt_z001的值按逗号分隔后放入数组中,然后在到数据库中用like查询
2.或者把数据库中的数据放到内存表中,然后同样用第一种方法中的数组值跟dataview中的值作比较,个人感觉第二种方法效率高些!
mark up
果然如此 2009-04-08
  • 打赏
  • 举报
回复
学习
jdbcodbc 2009-04-08
  • 打赏
  • 举报
回复
詳見樓上
takako_mu 2009-04-08
  • 打赏
  • 举报
回复
詳見樓下
cyz9977 2009-04-08
  • 打赏
  • 举报
回复
搶sf~~
jinjazz 2009-04-08
  • 打赏
  • 举报
回复
--测试环境
declare @s varchar(100)
set @s='PO0901017;PO0901001'

declare @t table (z001 varchar(100))
insert into @t select 'PO0901001;PO0901002;PO0901018'
insert into @t select 'a;b;c'


--测试语句
declare @t1 table (z001 varchar(100))
declare @s1 varchar(1000)
set @s1=right(replace(';'+@s,';',''' as S union select '''),len(replace(';'+@s,';',''' as S union select '''))-12)+''''
insert into @t1 exec(@s1)

select distinct a.* from @t a,@t1 b where charindex(b.z001,a.z001)>0

go

/*
z001
-----------------------------
PO0901001;PO0901002;PO0901018
*/
Tomzzu 2009-04-08
  • 打赏
  • 举报
回复
LZ注意了

就一句话

select charindex( 'PO0901001', z001 ) as Val from k_za01

结果值大于0说明存在, 等于0说明不存在
takako_mu 2009-04-08
  • 打赏
  • 举报
回复
恩,我想說的就是這些,LZ可以結貼了.
stromboy007 2009-04-08
  • 打赏
  • 举报
回复
哇曬~~~這么多高手幫忙了 那我就來接點分咯~~嘎嘎~~~~
saisky 2009-04-08
  • 打赏
  • 举报
回复
select * from [k_za01] where charindex('PO0901017;PO0901001', z001) > 0
cyz9977 2009-04-08
  • 打赏
  • 举报
回复
不錯不錯~~很多了~~我也來個存儲過程吧·~

--創建測試數據
create table k_za01 (z001 nvarchar(500))
insert into k_za01
select 'PO0901001;PO0901002;PO0901018'
union select 'PO0901001;PO0901023'
union select 'PO0901004;PO0901023'
union select 'PO0901023'
union select 'PO0901018;PO0901022'
union select 'PO0901022'

--創建存儲過程
create proc test
@str nvarchar(500)
as
begin
if(right(@str,1)<>';')
begin
set @str=@str+';'
end
while(len(@str)>0)
begin
declare @rr as table(tt nvarchar(20))
insert into @rr select left(@str,charindex(';',@str)-1)
set @str=right(@str,len(@str)-charindex(';',@str))
end
select * from k_za01 a where (select count(1) from @rr where a.z001 like '%'+tt+'%' )>0
end

--執行存儲過程
exec test 'PO0901023;PO0901022'

/*
z001
------------------------------------
PO0901001;PO0901023
PO0901004;PO0901023
PO0901018;PO0901022
PO0901022
PO0901023

(5 個資料列受到影響)
*/
加载更多回复(6)

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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