|
'====================================================================' ^9 {7 D0 [; p
'= Copyright (c) 2005 Eason Chan All Rights Reserved.
8 X W3 a' ~, F& B. I/ P'=-------------------------------------------------------------------- F5 G2 ?9 f& {1 H% d; Y* H! R8 N6 P9 w
'= 摘 要:格式化搜索字符函数. l. }: j( o+ n! P9 m# ~0 r
'=-------------------------------------------------------------------7 D3 _( h) ]- H" I" f
'= 最后更新:eason0073 E% N( c# _+ K! E9 _2 X5 v6 j# ]% u
'= 最后日期:2005-01-21
0 S2 l2 l/ `" f9 n'====================================================================# i# l9 ~5 D3 i! {4 H% r
Function MakeSQLQuery(QueryField,QueryStr)
8 z; ^% A) {: H' w3 ^* {( X: \* a Dim TagStart,TagEnd
9 x" o- K" b1 D7 j% k4 ^2 ?4 m Dim TempStr,TempArray: w5 M r' k* C# S5 y: a( p# L
Dim FullQueryStr X3 J( r0 f/ d: X( |4 l& T Z
Dim i,Way2 K) k) u/ i6 U
' Q7 ~. t+ V. G+ m0 o+ x' y
'先找引号定界符
. ~. x& \/ M" L! U, z" w, F Do
4 n( o4 m! ]$ C+ ] TagStart=InStr(QueryStr,"\")+ [8 ]/ X2 }9 r1 S1 c6 r- B2 r
If TagStart>0 Then - G, r" M/ j, N/ S5 C
TagEnd=InStr(TagStart+1,QueryStr,"\")
) F# I1 I9 x: b: I4 |/ w# Y ; r$ A& `: f- T3 H$ X
TempStr=Mid(QueryStr,TagStart+1,TagEnd-TagStart-1) i) i7 D4 m2 S! B
TempStr=Replace(TempStr," ","#")
: }! }+ \) X; V( z 6 `$ D8 r! e/ V4 A
QueryStr=Left(QueryStr,TagStart-1)&TempStr&Right(QueryStr,Len(QueryStr)-TagEnd)9 q1 I4 h- d& M) ^* P3 ^1 O3 E
End If
/ s* i6 j) P" m( q Loop While TagStart>0
' h" k, ~% A7 k
+ i3 o/ {0 K9 H2 ~2 i '处理or定界符
2 c+ s7 W5 u; f QueryStr=Replace(QueryStr,"|"," @")
- w! x4 @' K: V5 y '分隔关键字: M/ P6 N# `0 d" n
TempArray=Split(QueryStr," ")9 ?7 g) R1 G$ X+ [7 z' S% v
7 H. i, R5 b t# \& O5 ^; I For i=0 To UBound(TempArray)% }9 x+ Y. n" q% ], J( s) K1 J: g
If Left(TempArray(i),1)="@" Then
, F/ Q. @( D/ s: z& _6 o, Z ~ FullQueryStr=FullQueryStr&" Or "&QueryField, W) {4 C0 R% J/ [1 d- o
TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)
0 G ~6 `7 u! S/ i1 I& P- q; r Else3 j( P$ N4 N: r4 q- X/ k
FullQueryStr=FullQueryStr&" And "&QueryField
/ H8 ?4 \/ F1 G) ` End If6 c$ c. Q% _& t1 E
* u4 r: P. F, A9 w" O; X, C' }
If Left(TempArray(i),1)="-" Then
7 J& O0 A0 c& s3 }: G FullQueryStr=FullQueryStr&" Not "0 ^$ {4 e* q# D; j- R* u
TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)0 p* L( l$ C2 u3 [2 r$ X
End If9 ~# S4 ]3 \1 W8 H( b0 q( d
8 _) ^2 [$ G. q FullQueryStr=FullQueryStr&" Like '%"&TempArray(i)&"%'"
: _, J% H3 G! x$ Y ) d# q, `- o3 d! t, m' }7 G: x
FullQueryStr=Replace(FullQueryStr,"%$","")! E+ ?+ X# B9 G; [ U& m
FullQueryStr=Replace(FullQueryStr,"$%","")
6 ]$ k+ s( K5 g+ p6 { FullQueryStr=Replace(FullQueryStr,"#"," ")
; x& o& q" r+ o4 L7 c6 k Next
- X! v4 j; k) ]0 \5 ?, f4 o& A
1 S2 ^, e, W' M$ ~ MakeSQLQuery=FullQueryStr
% k2 Y* P1 \! AEnd Function( a9 U% X( d. m) f* v8 @' s7 i
9 a! D: X' X9 V1 r, m5 y& x2 Y2 r0 G3 ?- `9 ]. t1 Y. m
说明:$ z$ w9 n9 F& W$ G) C7 J8 U2 V5 j
用于搜索时,用户可进行复杂的查找,当前1。0版本只支持单字段的搜索,有心人士可自行修改为支持多字段,但请保留我的版权信息。3 X* I7 }. t( @8 ?7 N" L9 f" {
如有疏忽之处,还请原谅!
' d( ^) R L* G
) \6 L. ?* B) N示例:" C0 R1 t! ~! B
1、 空格连接=and,如 你好 我要=%你好% and %我要%
) T! n* Y" W' P7 `0 ^2、 避免内容包含字符=-,如 你好 -我要=%你好% and not like %我要% $ q/ N+ R% ~ S
3、 |=or,如 你好|我要=%你好% or %我要% ' ~) l+ `1 c# m v/ x
4、 词组搜索用双引号包含,如 \i love this game\=%i love this game%,而非=i and love and this and game ( ~/ {/ K6 h1 A$ c
5、 $为定界符,如 $你好=以 你好 开头的字符,你好$=以 你好 结尾的字符 : A+ O f3 V* Z( C+ a1 i
8 n" _" R1 ~: g" B' {# N; L- @$ c
组合查询
' w; H9 m, Z# V$ I# Z1 O5 a0 W如 \i love this game\|-你好=%i love this game% and not like %你好%
* c. x9 l( y4 Y' J3 v4 e( _$ x如 我要$|-$你好=%我要 or not like 你好% & N! S) o2 ^1 E& I: D
如 $\i love this game\ $你好$=i love this game% and like 你好 ' F2 V0 ~7 B) O- l: _
% t, v1 M9 G8 ^1 M; V, f
调用:
5 I5 i) X6 G+ t- B/ ~! V0 X* r
. M/ a/ e% G9 dDim SQL,WSQL
; e, A4 |, ^" Z) l4 z' Y1 `Dim Keyword,Field
% |/ r) o2 f4 ^& D* i: J; X& R; S H) D; N: V. R( D+ j
'get keyword
( k" u0 _* M: j) s, tKeyword=Request("keyword")1 R9 o2 N5 {( @- Q8 q& k+ M% N
Field=Request("field")
( s7 j. P3 n: i. i# @# l8 V5 M' ~5 S% d
WSQL=MakeSQLQuery(Field,Keyword)
@9 p' ?7 a4 Y2 H5 y5 e- |, o. m
SQL="SELECT * FROM table1 WHERE 1=1 "&WSQL |
|