阿力 发表于 2005-4-14 10:40:00

一个用于搜索的函数

'====================================================================
'= Copyright (c) 2005 Eason Chan All Rights Reserved.
'=-------------------------------------------------------------------
'= 摘    要:格式化搜索字符函数
'=-------------------------------------------------------------------
'= 最后更新:eason007
'= 最后日期:2005-01-21
'====================================================================
Function MakeSQLQuery(QueryField,QueryStr)
   Dim TagStart,TagEnd
   Dim TempStr,TempArray
   Dim FullQueryStr
   Dim i,Way
   
   '先找引号定界符
   Do
         TagStart=InStr(QueryStr,"\")
         If TagStart>0 Then
               TagEnd=InStr(TagStart+1,QueryStr,"\")
               
               TempStr=Mid(QueryStr,TagStart+1,TagEnd-TagStart-1)
               TempStr=Replace(TempStr," ","#")
               
               QueryStr=Left(QueryStr,TagStart-1)&TempStr&Right(QueryStr,Len(QueryStr)-TagEnd)
         End If
   Loop While TagStart>0
   
   '处理or定界符
   QueryStr=Replace(QueryStr,"|"," @")
   '分隔关键字
   TempArray=Split(QueryStr," ")
   
   For i=0 To UBound(TempArray)
         If Left(TempArray(i),1)="@" Then
               FullQueryStr=FullQueryStr&" Or "&QueryField
               TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)
         Else
               FullQueryStr=FullQueryStr&" And "&QueryField
         End If
         
         If Left(TempArray(i),1)="-" Then
               FullQueryStr=FullQueryStr&" Not "
               TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)
         End If
         
         FullQueryStr=FullQueryStr&" Like '%"&TempArray(i)&"%'"
         
         FullQueryStr=Replace(FullQueryStr,"%$","")
         FullQueryStr=Replace(FullQueryStr,"$%","")
         FullQueryStr=Replace(FullQueryStr,"#"," ")
   Next
   
   MakeSQLQuery=FullQueryStr
End Function


说明:
用于搜索时,用户可进行复杂的查找,当前1。0版本只支持单字段的搜索,有心人士可自行修改为支持多字段,但请保留我的版权信息。
如有疏忽之处,还请原谅!

示例:
1、 空格连接=and,如 你好 我要=%你好% and %我要%
2、 避免内容包含字符=-,如 你好 -我要=%你好% and not like %我要%
3、 |=or,如 你好|我要=%你好% or %我要%
4、 词组搜索用双引号包含,如 \i love this game\=%i love this game%,而非=i and love and this and game
5、 $为定界符,如 $你好=以 你好 开头的字符,你好$=以 你好 结尾的字符

组合查询
如 \i love this game\|-你好=%i love this game% and not like %你好%
如 我要$|-$你好=%我要 or not like 你好%
如 $\i love this game\ $你好$=i love this game% and like 你好

调用:

Dim SQL,WSQL
Dim Keyword,Field

'get keyword
Keyword=Request("keyword")
Field=Request("field")

WSQL=MakeSQLQuery(Field,Keyword)

SQL="SELECT * FROM table1 WHERE 1=1 "&WSQL

Eagle 发表于 2005-4-15 12:58:00

<P>哦,</P>
页: [1]
查看完整版本: 一个用于搜索的函数