欢 迎 光 临 数据载入中,请稍候......'s BLog
数据载入中,请稍候......
这就是我
数据载入中,请稍候......
用户登陆
数据载入中,请稍候......
最新公告
数据载入中,请稍候......
站点日历
数据载入中,请稍候......
最新日志
数据载入中,请稍候......
最新回复
数据载入中,请稍候......
最新留言
数据载入中,请稍候......
 日志搜索

友情链接
其他信息


·SQL SERVER 模糊搜索     -|cloudy 发表于 2006-7-18 10:17:35

SQL SERVER 模糊搜索

        在SQL语句中,模糊搜索很有意思,如果你用ACCESS数据库,那么备注型数据可以用 text  = '' 来搜索text字段为空的数据,而在SQL SERVER中这个语句将失去效力,ACCESS中的备注到SQL中一般为ntext,在SQL中你必须使用LIKE运算符才OK,前面的语句必须改为 text like '',SQL对于text 、ntext、image数据类型都是如此,如果你要搜索一个非空的话,必须使用not like '',否则执行错误。在这一点上,我觉得MS SQL是高级一些的。|
       而且我发现一点,ACCESS对于一些非ANSI的字符,LIKE运算符将失效。http://www.hzqn.com/以前就存在这样的问题,他们的歌曲搜索没有用。那都是日本鬼子害的!因为问题就出在一些日文歌曲的名字非法!!!不过这个问题在MS SQL得到很好的解决,嘻嘻~~~~

========================================================

急!!请大侠们告之怎样像那种模糊搜索,如:输入搜索关键词,“从事职业”也能搜出“大家好,你从事什么职业”记录

类似这个帖子看一下
http://search.csdn.net/Expert/topic/2521/2521969.xml?temp=.4280054

--建立测试环境
Create Table TEST(ID Int,TestText Nvarchar(100))
Insert TEST Values(1,N'大家好,你从事什么职业')
Insert TEST Values(2,N'你来自何方')
Insert TEST Values(3,N'我从事的职业是')
Insert TEST Values(4,N'我在中国')
--测试
Declare @SearchText Nvarchar(100)
Set @SearchText=N'从事职业'
Select * from TEST Where TestText Like '%['+@SearchText +' ]%'
--删除测试环境
Drop Table TEST
--结果
/*
IDTestText
1大家好,你从事什么职业
3我从事的职业是
*/

=====================

如何用SQL语句实现精确搜索以及模糊搜索 

在写WEB项目的时候,搜索是必须提供的功能
有时候,客户会输入用空格或其他分隔符分隔的一组关键词,我们需要根据输入找出以下结果:
绝对包含整组关键词连续出现的结果
包含整组关键词里每个词条,但是不一定连续出现的结果
包含整组关键词里任一条或多条关键词的结果

就像你在GOOGLE里搜索SQL SERVER 2000,
它首先严格匹配整个字符串
在找不到的情况下,看有没有包含这三个单词的结果
如果连三个单词都包含的结果都没有,就试着找出包含任一个词的结果
下面的代码是用C#在代码中动态构建这种搜索模式的条件语句的函数
其中KEYWORD就是关键词了
SEARCHMODE就是搜索模式了,1代表精确,2,代表全包含 ,3代表任意包含

string strCondition="Id in (";
            
string strSubQuery="select distinct productid from productcateview where id<>0 ";
            
if(Request.QueryString["Country"]!=null)
                strSubQuery
+=" and industryRegionId="+Request.QueryString["Country"];
            
if(Request.QueryString["Industry"]!=null)
                strSubQuery
+=" and IndustryId="+Request.QueryString["Industry"];
            
if(Request.QueryString["Keyword"]!=null)
            
{                
                
//SearchMode:搜索模式,1,代表精确搜索,2代表同时包含搜索3,代表的是包含任一单词的搜索
                string strKeyword=Server.UrlDecode(Request.QueryString["Keyword"].Replace("'","''"));
                
string strTemp="";
                strSubQuery
+=" and (";
                
string [] KeywordArray;
                
if(strKeyword.IndexOf(',')!=-1)
                    KeywordArray
=strKeyword.Split(',');
                
else
                    
if(strKeyword.IndexOf('|')!=-1)
                    KeywordArray
=strKeyword.Split('|');
                
else
                    KeywordArray
=strKeyword.Split(null);
                
//分主关键词
                if(KeywordArray.Length<2||strSearchMode=="1")
                
{
                    strSubQuery
+="( productfullname+' '+cast(shortdesc as varchar)+' '+keyword+' '+subcategoryname like '%"+strKeyword+"%')";
                }

                
else
                
{    
                    
if(strSearchMode=="2")
                    
{
                        strTemp
="productfullname+' '+cast(shortdesc as varchar)+' '+keyword+' '+subcategoryname like '";
                        
string strSqlKeyword="";
                        
for (int i=0;i<KeywordArray.Length;i++)
                        
{
                            strSqlKeyword
+="%"+KeywordArray[i];
                        }

                        strTemp
+=strSqlKeyword+"%'";
                    }

                    
if(strSearchMode=="3")
                    
{
                        strTemp
="";
                        
for (int i=0;i<KeywordArray.Length;i++)
                        
{
                            strTemp
+=" productfullname+' '+cast(shortdesc as varchar)+' '+keyword+' '+subcategoryname like '%"+KeywordArray[i]+"%' or";
                        }

                        strTemp
=strTemp.TrimEnd(new char[] {'o','r'});
                    }

                    strSubQuery
+=strTemp;
                }

                strSubQuery
+=")";
            }

            strCondition
+=strSubQuery;
            strCondition
+=")";
            
return(strCondition);    




三种模式中,第一种会构造出类似下面的SQL条件
Field1+field2+field3 like %keyword%
第二种构造出
field1+field2+field3 like %keyword1%keyword2%keyword3%
第三种构造出
field1+field2+field3 like %keyword1% or field1+field2+field3 like %keyword2% or field1+field2+field3 like%keyword3%
这三种模式来

其中KEYWORD1,KEYWORD2,KEYWORD三就是用KEYWORD分隔出来的单词了
一般可以假定客户用空白字符,OR,|或者,或者;来分隔
不过,一般来说,客户总是会用空格来分隔的

[阅读全文 | 回复(0) | 引用通告 | 编辑]

  • 标签:SQL 
  • 发表评论:
    数据载入中,请稍候......