|
'====================================================================
/ b4 J2 E! x- z) z'= Copyright (c) 2005 Eason Chan All Rights Reserved.7 U- | \1 V# S
'=-------------------------------------------------------------------
7 g& [8 m. T: w( t o'= 摘 要:格式化搜索字符函数
% Z8 X# `. G3 Q9 ~! l+ }'=-------------------------------------------------------------------
; I* u! w0 P( s) Z$ i'= 最后更新:eason0076 ]4 x% ?. C. D2 m
'= 最后日期:2005-01-219 `& G+ b3 i3 y! t& i7 n5 [* F
'====================================================================4 W5 D/ }3 K3 H2 D8 v- K
Function MakeSQLQuery(QueryField,QueryStr)+ l3 A+ i# x7 b1 G$ z
Dim TagStart,TagEnd# L: S M! o8 z; ?+ c/ Z7 j
Dim TempStr,TempArray) v7 [8 t$ [: R0 c( i7 l) I
Dim FullQueryStr
3 p/ m! H/ L# X. P s, \ Dim i,Way% X. `. d# _5 F9 c" p$ |1 t
: p: H k# }( P '先找引号定界符
. t f, a) a' j, V, C Do8 ?0 W1 s5 t" ^8 h, ]! R
TagStart=InStr(QueryStr,"\"), \% C% n* R* P# g N" v' }2 l, i9 |
If TagStart>0 Then
$ p' ~# t4 T8 m TagEnd=InStr(TagStart+1,QueryStr,"\") m' X; x& p) M: N7 u" {3 x' b
t1 L8 c1 g' T- a. q0 i TempStr=Mid(QueryStr,TagStart+1,TagEnd-TagStart-1)
8 j: O @/ ~# e4 Y TempStr=Replace(TempStr," ","#"); ^% B$ l& O* l
% `$ M8 @( I, u; t" W: t QueryStr=Left(QueryStr,TagStart-1)&TempStr&Right(QueryStr,Len(QueryStr)-TagEnd)( {- ]- u: h& B: f2 S; G
End If
+ z; z$ y( { q6 F( ~8 q$ | Loop While TagStart>0
: ~2 d( }4 p8 h1 j5 M
4 B2 r' Y# e4 | '处理or定界符
, u4 O! W, J: [8 N2 E7 k QueryStr=Replace(QueryStr,"|"," @") n& Y! P1 r, h
'分隔关键字+ Y- q" E$ Y- U! `
TempArray=Split(QueryStr," ")% U$ G) x! O4 f0 X; w
( S8 }! z! j' [( w
For i=0 To UBound(TempArray)
$ |* x! R3 m+ i" X! x If Left(TempArray(i),1)="@" Then* E$ C( _& X4 s- ^3 {* f
FullQueryStr=FullQueryStr&" Or "&QueryField
) r; Q& n7 o' ?: w; q6 G TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)" T$ p3 V# C% V; \ P8 V
Else
2 e) U* S- |* ]* l2 g. ~. d FullQueryStr=FullQueryStr&" And "&QueryField9 R5 \+ m9 T: H* x4 X" b
End If
; @( L! x, \* K6 [9 R/ d! x
: N1 i' }* x9 D2 W If Left(TempArray(i),1)="-" Then / B# {! E0 J. ]4 j$ i( U$ W7 M; Y
FullQueryStr=FullQueryStr&" Not "
; {& s0 [; R4 j3 H TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)1 u3 L5 h8 E3 [' j7 c: I
End If1 h" [; Q. M, S
" ~0 `. R: S& Q% t$ H FullQueryStr=FullQueryStr&" Like '%"&TempArray(i)&"%'"
/ H0 c$ K5 H% f: O& R ; ]) W* ]$ q0 [ J2 a* p8 T) p
FullQueryStr=Replace(FullQueryStr,"%$","")
$ G- o9 x W$ F2 R: Y5 d1 I FullQueryStr=Replace(FullQueryStr,"$%","")
8 Z# N$ Y6 A1 V% U6 {3 m) V$ f FullQueryStr=Replace(FullQueryStr,"#"," ")
4 q% b8 Y( O0 y, s1 v. N) X Next9 y# {; l# N0 x" X3 \: [" r
% B- E, N% R& k4 r MakeSQLQuery=FullQueryStr7 H7 W- K, ]+ x# f3 {3 b
End Function
" h1 @2 v) x* U- b" j8 w$ q6 v$ r$ k
6 V$ k0 B% ~. i! N0 M H
说明:
6 O$ P- w# P. O( n( V* b用于搜索时,用户可进行复杂的查找,当前1。0版本只支持单字段的搜索,有心人士可自行修改为支持多字段,但请保留我的版权信息。1 X8 p# S2 x& d
如有疏忽之处,还请原谅!
0 ?/ J# x; m" O; p! ~+ `7 S, r/ A3 I/ @1 w! i, ]! ^/ `
示例:4 F4 q9 D; y6 b' ~
1、 空格连接=and,如 你好 我要=%你好% and %我要%
' P+ R5 Z2 b8 Z" x6 {; {, D/ C) v2、 避免内容包含字符=-,如 你好 -我要=%你好% and not like %我要%
% `( e1 i6 Q* H& e3、 |=or,如 你好|我要=%你好% or %我要%
8 j# \* `% b3 l N2 [3 M4、 词组搜索用双引号包含,如 \i love this game\=%i love this game%,而非=i and love and this and game # C: M- Q4 i7 E
5、 $为定界符,如 $你好=以 你好 开头的字符,你好$=以 你好 结尾的字符 2 y- P* |6 j6 v9 M& T& j
3 f" J. J& O: k E组合查询
6 w% {. Z3 _' `4 h' w0 ^/ l如 \i love this game\|-你好=%i love this game% and not like %你好% # }7 k6 p* p$ q
如 我要$|-$你好=%我要 or not like 你好% . v3 C7 o2 ]+ M9 n5 s
如 $\i love this game\ $你好$=i love this game% and like 你好
1 ]8 T0 {- T* z; Q" W5 c
. X! o/ n( c1 ^$ N/ I调用:
+ C N! t' }: I4 T. n7 x* @# o" x9 p# ]/ m
Dim SQL,WSQL# T+ T5 ]* N8 W, p! Q
Dim Keyword,Field
4 f/ ?: D$ ]8 F. ]: ^" r# V/ x- A8 r* X! c l
'get keyword# f3 Q l; u- L$ r3 }% o
Keyword=Request("keyword")
* @' O% n1 G+ p$ n6 d" ^- yField=Request("field")
X: o0 V) `9 O" R* K }" y) p
$ ~5 c" F6 w7 c2 `- G9 m2 G1 XWSQL=MakeSQLQuery(Field,Keyword)
! O2 @ B0 _' }* v. e+ _% X- W5 c# d! j1 h
SQL="SELECT * FROM table1 WHERE 1=1 "&WSQL |
|