|
'====================================================================
) C, h2 E+ u* {3 ]'= Copyright (c) 2005 Eason Chan All Rights Reserved. j+ A. d! {' k7 K
'=-------------------------------------------------------------------
9 Y- V9 b& y7 p+ x3 P( t'= 摘 要:格式化搜索字符函数: }- c: V. A9 R& w. Z
'=-------------------------------------------------------------------
1 k2 V. M6 C% x. N9 p- t& Y'= 最后更新:eason007. _ m( T" \1 v: b; F/ `
'= 最后日期:2005-01-21
7 z8 c6 y7 h' }'====================================================================) G$ H- e1 G- j& b
Function MakeSQLQuery(QueryField,QueryStr)
; ~- x5 ?' W. Y' b& h' W Dim TagStart,TagEnd
" s4 O8 F- X, M. ^* D Dim TempStr,TempArray4 [' R* T% Q6 r3 v8 y
Dim FullQueryStr4 H8 r# x3 I B+ c0 V
Dim i,Way
8 ~! ?+ Q) e! }& _1 e# n
( o3 C9 g1 K2 b9 b( q0 A '先找引号定界符' B) @; I& Z9 E! H |3 M
Do! l5 Q* E; L4 h, |( F/ U; Q; r3 h
TagStart=InStr(QueryStr,"\")
& J: L2 d- ?8 D! d# y L If TagStart>0 Then N7 T* l3 u1 z3 m' m
TagEnd=InStr(TagStart+1,QueryStr,"\")
' z- S( b( V- N % v; Y9 t/ v* Z( p4 g+ u
TempStr=Mid(QueryStr,TagStart+1,TagEnd-TagStart-1)
: V( o( ~9 h; O9 b TempStr=Replace(TempStr," ","#")9 i# G0 M3 Z J5 ~+ q% w7 w
% m3 R! C$ B1 i- r/ z% I) d
QueryStr=Left(QueryStr,TagStart-1)&TempStr&Right(QueryStr,Len(QueryStr)-TagEnd)
: K# n; l- m1 @. g$ o End If
" g S. }. f5 h5 J! j! e0 m* U- L: R Loop While TagStart>0, P9 c4 z$ ]( G
! o5 g% x# A3 h' B5 J
'处理or定界符9 T1 C# |! W: g0 R1 H! C/ u& I
QueryStr=Replace(QueryStr,"|"," @")# K5 w- T' r) l% l1 S( d1 H8 L
'分隔关键字$ O2 g2 z( j% Z+ C! @
TempArray=Split(QueryStr," ")$ K2 S4 e7 {, |; O
8 n1 G9 j: e8 k3 H/ b2 o: \+ V For i=0 To UBound(TempArray)
$ K6 r# I0 x2 o* M j If Left(TempArray(i),1)="@" Then
9 S) o. c7 h N0 q/ ` FullQueryStr=FullQueryStr&" Or "&QueryField9 O1 u* \, I, |
TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)- X5 }2 b& h0 d' R7 W: `8 D ?2 u
Else Z6 p" M s; D7 j7 V
FullQueryStr=FullQueryStr&" And "&QueryField
3 ` N7 ^3 j' ] End If
! K, W: n0 l0 i1 r8 P0 a ' I; D9 g' A2 [$ k6 ~* o
If Left(TempArray(i),1)="-" Then
2 H) Y2 b9 P" W& }+ P; ~. b: s y FullQueryStr=FullQueryStr&" Not "
9 @+ t% s% ]7 \8 O# E; h) C TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)
% B6 G0 u7 _) ? End If% e! x! Q# ?% p0 q8 k) d
: D6 g9 Q7 R9 l3 C. Y1 ^2 F* h0 |# D
FullQueryStr=FullQueryStr&" Like '%"&TempArray(i)&"%'", s. ~1 V) K: \" {# T" w' }
: Y1 W) p/ x `! j FullQueryStr=Replace(FullQueryStr,"%$","")
/ x4 ] Q, K' Y. q8 l/ o/ A FullQueryStr=Replace(FullQueryStr,"$%","")
, D8 ?" Q% M; R* ]- S } J FullQueryStr=Replace(FullQueryStr,"#"," ")! X8 j( O/ L* S; Q* U; r
Next, o/ O+ [" ^. w/ B
, y/ B! S6 H; \( [- } MakeSQLQuery=FullQueryStr- M& B, j8 D- t1 G$ b1 n9 G! i/ N
End Function% Z( v, M$ F" W: O4 Z9 z
. L3 ~8 t, o' P: X* u* B7 M+ |) Y/ ]7 Z$ M( b l9 b0 F
说明:2 e% v5 C- s+ p! `5 Q4 A
用于搜索时,用户可进行复杂的查找,当前1。0版本只支持单字段的搜索,有心人士可自行修改为支持多字段,但请保留我的版权信息。1 l3 ~+ Q+ d# T( i
如有疏忽之处,还请原谅!2 D$ s' k$ b7 y) T( `" g/ o7 F5 F
8 J C5 K4 Z; ~7 U3 q0 ~8 o
示例:
0 A2 K1 k0 Y8 V+ o1 P6 S2 c1、 空格连接=and,如 你好 我要=%你好% and %我要%
X8 l# S+ [1 c" R1 M2、 避免内容包含字符=-,如 你好 -我要=%你好% and not like %我要% $ k7 H4 a& r6 \8 j
3、 |=or,如 你好|我要=%你好% or %我要%
1 d. x f6 O3 z- i& G2 Z4、 词组搜索用双引号包含,如 \i love this game\=%i love this game%,而非=i and love and this and game 1 \* q' B+ ]* \9 E& o7 ^: S+ q, V
5、 $为定界符,如 $你好=以 你好 开头的字符,你好$=以 你好 结尾的字符
" k# T0 H' _0 l1 q5 [+ K# q8 E2 S
组合查询 3 M. z- Z ^9 u6 U/ q; v [) }
如 \i love this game\|-你好=%i love this game% and not like %你好%
0 a- t& |# `9 F7 H8 R+ s4 U/ D+ t如 我要$|-$你好=%我要 or not like 你好% 2 }, w& y% [( V) d, z( h1 v$ T
如 $\i love this game\ $你好$=i love this game% and like 你好 7 I# M1 Z z. y5 m
; T2 m2 b \; q( J调用:( i0 z, Q& U( V- A, Y) W& w7 ^
/ M9 o9 {1 m% J! IDim SQL,WSQL# O) m7 f: v% h8 R3 d' l# o- u
Dim Keyword,Field; U% Q. m' H# m) ?+ Q) y) \
9 s; ` m* P: e+ P# O'get keyword# b. Q+ E" ?3 b6 I# ?
Keyword=Request("keyword")5 V) F+ V5 t" O+ E8 \
Field=Request("field")4 k. O+ i2 M; `1 o
. h: R3 i Q3 a- J
WSQL=MakeSQLQuery(Field,Keyword)# M" ~* P! P8 x$ k7 B3 H8 V! M
8 Q2 [: N9 z1 n; l; K) e( E
SQL="SELECT * FROM table1 WHERE 1=1 "&WSQL |
|