|
'====================================================================
5 D, m4 s5 G1 s( }'= Copyright (c) 2005 Eason Chan All Rights Reserved.
l, \0 e( I8 C4 m, `" N. Z1 R'=-------------------------------------------------------------------
L, i1 O2 Y: C% H'= 摘 要:格式化搜索字符函数' E5 ~% m2 j. E9 ]: n
'=-------------------------------------------------------------------
' P2 m4 t/ p* ~'= 最后更新:eason007& r) [% f: f0 o
'= 最后日期:2005-01-21+ y& j J3 F' c3 n, {
'==================================================================== {+ Q2 u) A- M4 Q
Function MakeSQLQuery(QueryField,QueryStr)! p% w2 u, }, g7 O
Dim TagStart,TagEnd' O! z, k. H1 s2 U9 {: C, u
Dim TempStr,TempArray
! ~7 a. C, K% C; P Dim FullQueryStr3 U8 P; F/ k3 B6 @7 g
Dim i,Way: Q0 {: {* Q) g; n+ V
$ M. q2 l/ _$ X* t* e; L
'先找引号定界符
/ H. ?0 N( N5 D. J8 l- C V3 f Do
3 c& w5 p+ `) g TagStart=InStr(QueryStr,"\")
. A# b- I$ [& `, o- u; A If TagStart>0 Then
\7 L# A# J4 D1 h0 K" L- y TagEnd=InStr(TagStart+1,QueryStr,"\")
# k( I5 o; Y8 X
+ \0 e9 T& P7 k% v TempStr=Mid(QueryStr,TagStart+1,TagEnd-TagStart-1)9 v& }0 |' [3 [$ t' w! U
TempStr=Replace(TempStr," ","#")+ N7 L% C5 ^9 B4 H* X
- L- x. o4 k. a5 [( D
QueryStr=Left(QueryStr,TagStart-1)&TempStr&Right(QueryStr,Len(QueryStr)-TagEnd)
4 S; `, D: C) E( O# f3 j End If, D. W6 M/ H3 i
Loop While TagStart>0; E# A# x$ p" G9 N' g9 w; \( a* A0 t
* k" U- f# ^" R; V( q '处理or定界符- l6 W0 h x4 S- J, I
QueryStr=Replace(QueryStr,"|"," @")' o+ X( p$ M2 m' B, C
'分隔关键字
) {/ z* P- E) g7 V" ], n TempArray=Split(QueryStr," ")7 W& M. c3 L5 A7 v/ a
7 M+ n6 x$ Q. H+ x* i# b For i=0 To UBound(TempArray)$ B8 D2 w4 K9 `) q$ C: j2 A6 }% W, g. S
If Left(TempArray(i),1)="@" Then
' U: O- m2 W- e5 s& d4 W( y FullQueryStr=FullQueryStr&" Or "&QueryField; C0 r4 B) y" z
TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)
* D, E* s) g# T P4 B# b! k+ c! I Else
6 S9 L2 Y2 g" h1 P FullQueryStr=FullQueryStr&" And "&QueryField! ~! w% G. C! e2 `
End If
7 G, H# C) |1 Y/ \0 [
& \9 f5 g* @5 f. Q ^: Z1 z If Left(TempArray(i),1)="-" Then
) W! a/ M& k2 F" U* M' b& m FullQueryStr=FullQueryStr&" Not "
# v% x! o4 V' w" a( G- K7 S TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)
: a; R1 ?' ?# _8 |1 z* o5 n+ h End If
! G# j0 c+ L: F& Y 8 f6 E2 K7 T2 j
FullQueryStr=FullQueryStr&" Like '%"&TempArray(i)&"%'"$ x8 f6 V. a$ E" e6 Y4 b6 I5 V
2 G% f" U& \- ~ S, G, L( g$ s
FullQueryStr=Replace(FullQueryStr,"%$","") w0 W0 Z8 Z0 I, v
FullQueryStr=Replace(FullQueryStr,"$%","")- ?7 l* i! `6 I. D
FullQueryStr=Replace(FullQueryStr,"#"," ")' s# G1 Y$ C, U9 x
Next9 G$ A1 \2 W# F, o
5 @ w# h* J/ o9 d7 ^! y MakeSQLQuery=FullQueryStr$ J# _0 l+ w' h/ _3 ^; g ?
End Function
6 y: m. E6 x: C+ E: {4 R) |) g! z3 e6 O
3 S. B, G7 V" K# |. u
说明:" f% q: v o5 R
用于搜索时,用户可进行复杂的查找,当前1。0版本只支持单字段的搜索,有心人士可自行修改为支持多字段,但请保留我的版权信息。
- y$ s* }& R. u& d7 k1 O如有疏忽之处,还请原谅!( h2 V/ Q% s$ L1 x' {: h0 J! ~
/ ^7 ?" P3 A/ p3 g3 L
示例:
/ ?7 @, A/ x0 l1、 空格连接=and,如 你好 我要=%你好% and %我要% 1 ?6 ?- [" _0 Y( k/ a
2、 避免内容包含字符=-,如 你好 -我要=%你好% and not like %我要%
, h1 F& I& J0 N& M# N, e3、 |=or,如 你好|我要=%你好% or %我要% ! s# q$ o- E. Y: ?( {" z! B: I
4、 词组搜索用双引号包含,如 \i love this game\=%i love this game%,而非=i and love and this and game + I* N) z3 o a0 l
5、 $为定界符,如 $你好=以 你好 开头的字符,你好$=以 你好 结尾的字符
* K; C0 d; t" l P" H( |
% S1 X! f% w4 Z2 u组合查询 4 e# S9 U, |9 D( K1 c3 \! Y
如 \i love this game\|-你好=%i love this game% and not like %你好% 4 M5 ^9 ]1 D1 ?! v
如 我要$|-$你好=%我要 or not like 你好% , o# N9 F( _% N; z
如 $\i love this game\ $你好$=i love this game% and like 你好 ) J) g2 U; R- n2 X, ?. K3 _, v
% Q, p# w- I! i4 m6 l1 a
调用:& `1 M6 v( B0 ~$ i) ?
# q) x* w0 U- h7 r* | L: HDim SQL,WSQL" P5 Z$ ?3 c7 R* `) I; _; K) J/ S) k
Dim Keyword,Field
) W* h# {8 i( r4 ^/ X9 S
9 t% u( M" @# s; D& f5 V'get keyword s: U4 B+ Y( o) R, i5 x$ C
Keyword=Request("keyword"); |. D, L/ a: @9 }: {
Field=Request("field")& d$ c% @( n. P2 \' r; D, j
9 A- I8 k& C* O3 [- q$ y _
WSQL=MakeSQLQuery(Field,Keyword)& p8 [3 j& L! f0 ^% ?6 L- `- D
* R0 [- [8 J/ ]# V: t+ l* e
SQL="SELECT * FROM table1 WHERE 1=1 "&WSQL |
|