求一复杂sql语句的实现思路 一系统中需要验证所输入的用户名(组)是否已经存在。实例:输入框: 张三,李四,王五要验证数据库中是否存在以上人名中的一个或是多个并显示出来。求助1:如何做这种以标点符号分割的多人名验证?2:如果采用不同的标点符号,该怎么处理(例如,。?,.?) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 select * from table where name in('张三,李四,王五') select * from table where charindex(name,'张三,李四,王五')>0 select * from table where name in('张三','李四','王五') 至少有一个规则,要不然你输入:张三?李四,王五那就有点过分了--可以split写个方法,一个一个区匹配。然后返回一个字符串。当然类似楼上的方法是效率最高的 declare @name nvarchar(100)select * from tb where charindex(@name ,'张三,李四,王五')>0 1:select * from table where charindex(name,'张三,李四,王五')>02: s.split分割,参数中输入标点符号 select * from tb where charindex(name ,'张三,李四,王五')>0 使用正则将符号全部替换在sql中使用in即可 string name=txtName.Text.replace(",",",")select * from table where name in('"+name+"') create table #User( UserName nvarchar(50))insert into #User select '张三'insert into #User select '李四'insert into #User select '王五'declare @str nvarchar(50)set @str='张三,李四,王五'select UserName from #User where charindex(UserName,@str)>0UserName--------------------------------------------------张三李四王五 create table #User( UserName nvarchar(50))insert into #User select '张三'insert into #User select '李四'insert into #User select '王五'declare @str nvarchar(50)set @str='张三,李四,王五'select UserName from #User where charindex(UserName,@str)>0UserName--------------------------------------------------张三李四王五正解 分割不一定要放到SQL中处理,直接用asp.net处理,然后再传入参数.如果可能有不同的标点符号,最好的办法是用正则. 引用 18 楼 ws_hgo 的回复:SQL codecreatetable #User ( UserNamenvarchar(50) )insertinto #Userselect'张三'insertinto #Userselect'李四'insertinto #Userselect'王五'declare@strnvarchar(50)set@str='张三,李四,王五'select UserNamefrom #Userwher?- 这句话是什么意思?qiuzhu 大家的帖子我都看了。。只是我现在做的是用 StringBuilder strbld = new StringBuilder(); BLL.BaseCase basecase = new YingKe.BLL.BaseCase(); DataRowCollection dcAclient = basecase.GetAllList().Rows; DataTable ds = new DataTable(); ds = basecase.GetAllList().Clone(); foreach (DataRow item in dcAclient) { string[] b = item["Privies"].ToString().Split(new char[] { ',', ',', '.', '、', ':', ':', '。', '|', '?', '?' }); for (int i = 0; i < b.Length; i++) { string[] a = tbDelPerson.Text.Trim().Split(new char[] { ',', ',', '.', '、', ':', ':', '。', '|', '?', '?' }); for (int j = 0; j < a.Length; j++) { if (a[j].ToString() == b[i].Trim()) { ds.Rows.Add(item.ItemArray); } } } } if (ds.Rows.Count != 0) { this.Repeater1.DataSource = ds; this.Repeater1.DataBind(); chongtu = true; Response.Write("<script language='javascript'>alert('存在冲突!');</script>"); }现在的问题是我要用到查询张三或者张大山都可以查询的道。。也就是说要实现分隔符里面的模糊查询。。 提供一个思路,自己实现吧string nameSrc = "张三?,??李四,,。,王五 ..."; string[] tmpArr = (select use_name from table); foreach(string tmpName in tmpArr ) { if(nameSrc.contains(tmpName )) { ..........; } } select * from table where charindex(name,'张三,李四,王五')>0 string name=txtName.Text.replace(",",",") select * from table where name in('"+name+"') 要模糊查询的话, 可能要用到全文搜索了, 你可以去网上找一下sqlserver 里的全文搜索配置方法。 需要一整套的流程做下来才可以。WHERE CONTAINS(Name, '张三') OR CONTAINS(Name, '李四') select * from tb where charindex(name ,'张三,李四,王五')>0 select * from table where charindex(name,'张三,李四,王五')>0 使用类型化DataSet时候的TableAdapter主从关系 JS效果 怎样在将GridView数据导出到Excel时,指定列导出? 求人分析url IE Web 控件安装有问题 为什么button下的代码不执行?救命了 请高手帮我看看为什么这二个程序的结果不一样 脱离了asp.net一段时间 问问现在asp.net主流的开发技术 NetSDK这个数据库怎么管理? web客户端和tcp/ip服务器怎么通讯 repeater控件 jQuery的小问题
要不然你输入:张三?李四,王五
那就有点过分了
--
可以split写个方法,一个一个区匹配。
然后返回一个字符串。当然类似楼上的方法是效率最高的
select * from tb where charindex(@name ,'张三,李四,王五')>0
2: s.split分割,参数中输入标点符号
(
UserName nvarchar(50)
)
insert into #User select '张三'
insert into #User select '李四'
insert into #User select '王五'declare @str nvarchar(50)
set @str='张三,李四,王五'
select UserName from #User where charindex(UserName,@str)>0UserName
--------------------------------------------------
张三
李四
王五
create table #User
(
UserName nvarchar(50)
)
insert into #User select '张三'
insert into #User select '李四'
insert into #User select '王五'declare @str nvarchar(50)
set @str='张三,李四,王五'
select UserName from #User where charindex(UserName,@str)>0UserName
--------------------------------------------------
张三
李四
王五
正解
如果可能有不同的标点符号,最好的办法是用正则.
SQL codecreatetable #User
(
UserNamenvarchar(50)
)insertinto #Userselect'张三'insertinto #Userselect'李四'insertinto #Userselect'王五'declare@strnvarchar(50)set@str='张三,李四,王五'select UserNamefrom #Userwher?-
这句话是什么意思?qiuzhu
BLL.BaseCase basecase = new YingKe.BLL.BaseCase();
DataRowCollection dcAclient = basecase.GetAllList().Rows;
DataTable ds = new DataTable();
ds = basecase.GetAllList().Clone();
foreach (DataRow item in dcAclient)
{
string[] b = item["Privies"].ToString().Split(new char[] { ',', ',', '.', '、', ':', ':', '。', '|', '?', '?' });
for (int i = 0; i < b.Length; i++)
{
string[] a = tbDelPerson.Text.Trim().Split(new char[] { ',', ',', '.', '、', ':', ':', '。', '|', '?', '?' }); for (int j = 0; j < a.Length; j++)
{
if (a[j].ToString() == b[i].Trim())
{
ds.Rows.Add(item.ItemArray);
}
} }
}
if (ds.Rows.Count != 0)
{
this.Repeater1.DataSource = ds;
this.Repeater1.DataBind();
chongtu = true;
Response.Write("<script language='javascript'>alert('存在冲突!');</script>");
}
现在的问题是我要用到查询张三或者张大山都可以查询的道。。也就是说要实现分隔符里面的模糊查询。。
string nameSrc = "张三?,??李四,,。,王五 ...";
string[] tmpArr = (select use_name from table);
foreach(string tmpName in tmpArr )
{
if(nameSrc.contains(tmpName ))
{
..........;
}
}
WHERE CONTAINS(Name, '张三') OR CONTAINS(Name, '李四')