|
'====================================================================
* @$ H, N! A& h1 ~'= Copyright (c) 2005 Eason Chan All Rights Reserved.
3 l" O% a% M, D: F: u'=-------------------------------------------------------------------
: ~ U4 D; C J% o+ N' s2 d'= 摘 要:格式化搜索字符函数
2 H6 L/ I$ {4 U: _. S'=-------------------------------------------------------------------5 _# l& @( F9 l8 y4 D
'= 最后更新:eason0072 s6 ]3 f& _/ p5 ]" J
'= 最后日期:2005-01-21
8 [6 M' p! ?" F# f3 B% L'====================================================================
$ _5 U% b3 w) e. C( ]Function MakeSQLQuery(QueryField,QueryStr)# M) T3 c: V/ B4 `) d5 Z, A
Dim TagStart,TagEnd \) j) K3 d K0 {' Q o: d
Dim TempStr,TempArray4 Q9 A2 B6 u l9 i$ w# B. B. O- |2 C. s
Dim FullQueryStr7 E4 O) ~/ c3 ?0 m7 e- g: W
Dim i,Way1 W% A! D [( d( ]. v( d: @1 N% M
( z3 p: p& `, C- a! S '先找引号定界符
+ f2 _, h% D/ i2 j% O. W, c* i Do
3 o. E/ d6 K- F& }4 s TagStart=InStr(QueryStr,"\")
6 `/ [! w/ H E If TagStart>0 Then
: I9 y; l& ?: [$ U# ?, [! e TagEnd=InStr(TagStart+1,QueryStr,"\")
" E0 v+ a7 ?$ H, g' Z ) L3 _ J4 t* O4 ?# A8 x5 T
TempStr=Mid(QueryStr,TagStart+1,TagEnd-TagStart-1)0 t" x( w( t8 Z( {
TempStr=Replace(TempStr," ","#")
5 P4 h( i1 }' O& M
% k4 b* s2 I* u$ ~2 k: f5 A% K QueryStr=Left(QueryStr,TagStart-1)&TempStr&Right(QueryStr,Len(QueryStr)-TagEnd)/ s o% Q* [' [
End If0 j- ~. g! U C2 Y, v
Loop While TagStart>0( i$ Z# M' _/ f) M# p% d& u- ~1 F4 `/ L
1 }! n, m- D- v '处理or定界符$ r) F- H! _$ {/ T3 m5 d
QueryStr=Replace(QueryStr,"|"," @")
# M8 y: R3 U0 V# E6 t- J* R' ~ '分隔关键字
$ h+ ]5 Y8 J8 F/ r% N% k1 L TempArray=Split(QueryStr," ")
9 s1 k3 _1 E7 }9 I3 f' ~" j
" B: w% r% N8 O } For i=0 To UBound(TempArray)
% [9 |, S1 Q+ @/ l, ^0 J6 m If Left(TempArray(i),1)="@" Then
% x9 \3 z( Z9 [2 l FullQueryStr=FullQueryStr&" Or "&QueryField
" |/ u$ }7 P. y/ q' k; ^ TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)
3 s2 s( K& d0 A# _ Else
! D1 M/ X) S+ C7 ?$ ^ FullQueryStr=FullQueryStr&" And "&QueryField
& l$ A* `% j: f. x1 Q7 d& d End If
' F* Z5 ^2 L! C1 k
, Y) @7 T, Q/ Q Q If Left(TempArray(i),1)="-" Then 9 C4 Y6 O( h& k, `
FullQueryStr=FullQueryStr&" Not " ?+ S) F i8 h% t4 E; a E$ v
TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)$ C- Q' i8 g( ~1 S
End If/ ^; ~8 o2 J6 s* H/ q
9 N0 f& Z* \5 U) n$ o) ?$ a
FullQueryStr=FullQueryStr&" Like '%"&TempArray(i)&"%'"
( i+ u; e3 x0 R. F 1 Q2 r# G3 O6 E: \% e
FullQueryStr=Replace(FullQueryStr,"%$","")
$ V6 @+ l' H* d1 O FullQueryStr=Replace(FullQueryStr,"$%","")0 Y5 |' q. Z, R
FullQueryStr=Replace(FullQueryStr,"#"," ")$ Y% C6 L* F6 Q5 ~3 J4 x
Next! [$ P( X3 D9 H3 H7 n
% q# V) }+ q- i2 R/ K6 X3 \1 t
MakeSQLQuery=FullQueryStr% b( k+ d5 k7 L: a4 x
End Function
3 Q/ M6 ~. Q s# Z& G& h: s. @; L1 t5 P
+ X4 f2 c7 C7 m1 }, C, e3 ]说明:
' [* z2 z. N( R) k/ c& H用于搜索时,用户可进行复杂的查找,当前1。0版本只支持单字段的搜索,有心人士可自行修改为支持多字段,但请保留我的版权信息。
/ _3 R$ v$ P" C! W; Z h0 w; R7 T如有疏忽之处,还请原谅!. ?/ ^* I/ m* |, R' K
1 ^/ I+ E5 J; p( I* M! w
示例:3 X( ?- @" J$ _3 B4 S
1、 空格连接=and,如 你好 我要=%你好% and %我要%
) N1 G/ S0 J a) f4 ?2、 避免内容包含字符=-,如 你好 -我要=%你好% and not like %我要%
- A3 t$ e. T! _6 M: x# {3、 |=or,如 你好|我要=%你好% or %我要% : ^; z3 S; x( v( Y( V9 `
4、 词组搜索用双引号包含,如 \i love this game\=%i love this game%,而非=i and love and this and game
; a* W. S8 W% { w1 D5、 $为定界符,如 $你好=以 你好 开头的字符,你好$=以 你好 结尾的字符 " i# O! W' s6 }9 [# @# ^2 Q
) G7 s$ X. t; g8 h# `0 ^' {
组合查询 1 V/ T" I5 P2 f }/ C
如 \i love this game\|-你好=%i love this game% and not like %你好% $ h5 @6 o. k0 n# g
如 我要$|-$你好=%我要 or not like 你好%
' k: E+ g! {/ d5 _如 $\i love this game\ $你好$=i love this game% and like 你好 ! a- H+ P$ l6 P4 w2 s! I# H% q
+ H6 x+ g, Q' B% E
调用:9 o+ P) Q: s: o3 X( l& ~+ z, o' Q
- M; g- }- O3 \3 e8 M! @Dim SQL,WSQL
5 v; V2 m/ p7 RDim Keyword,Field) Z# a" ]! i5 i1 @* a7 G5 F
+ ]' k5 \4 l# I' u8 S( d
'get keyword
/ {8 A- W* f6 T" q$ Z" r3 FKeyword=Request("keyword")/ a/ J6 m$ c: V8 t* @! c. A
Field=Request("field")+ W& z+ E; f* N6 ~6 X/ w
v8 \4 l- f( N4 O# c4 k: Q
WSQL=MakeSQLQuery(Field,Keyword)
: K) f! D% H3 p, m7 d+ j& Z. m; l& _, `
SQL="SELECT * FROM table1 WHERE 1=1 "&WSQL |
|