|
'====================================================================
6 e$ e9 [ R! N5 P5 ]0 r'= Copyright (c) 2005 Eason Chan All Rights Reserved.4 }5 J" j( z; x% j8 `
'=-------------------------------------------------------------------
4 F( u; T2 l8 v; m* S- q$ o* c'= 摘 要:格式化搜索字符函数& q# C* S( x; S0 S% T% @; h! S8 U( K$ W
'=-------------------------------------------------------------------
+ v$ {% R% B f( D'= 最后更新:eason007+ B) x ~. q7 |& X7 m4 B
'= 最后日期:2005-01-21/ `% U6 ]9 E( M7 f6 |, e2 p) R
'====================================================================
0 v. F# O( A$ f+ H. Q8 HFunction MakeSQLQuery(QueryField,QueryStr)
0 E1 l# r |) M, `% }% r0 _ Dim TagStart,TagEnd
R$ n$ @: u: p/ o$ M( M Dim TempStr,TempArray
' w' O( B) O+ @: o5 [. C# x Dim FullQueryStr
5 b- y# I3 U+ j0 @, a, x! C Dim i,Way6 m3 }1 f; ^4 h% Z( \/ B
! h4 }6 t! k8 c7 j2 c* U; h
'先找引号定界符
3 C1 d' O2 [# l: `6 Y7 p. `6 w Do. A1 p2 D" r- j# Q3 A9 _
TagStart=InStr(QueryStr,"\")
/ D- G+ ?$ O: X# K% C If TagStart>0 Then * m' V+ j6 Y3 B2 C. t0 @
TagEnd=InStr(TagStart+1,QueryStr,"\")
2 B- |5 g! x- a! o; q2 v8 T2 x 0 W1 d" O) W" w6 V( @
TempStr=Mid(QueryStr,TagStart+1,TagEnd-TagStart-1)8 F5 ^! Q# B3 S, C% ]
TempStr=Replace(TempStr," ","#")
- @* Y. R7 i: @- X! O y8 A2 E' l* u, e1 S
QueryStr=Left(QueryStr,TagStart-1)&TempStr&Right(QueryStr,Len(QueryStr)-TagEnd)
' I) ]* I. T6 G% ? A' x End If
1 ]9 Q, O( \+ n Loop While TagStart>0- j2 |8 a7 Y4 K( T# j: z
) r8 ^4 x1 V! ]( E; j. ? '处理or定界符1 N* \! g0 } P3 y i$ q/ @2 g
QueryStr=Replace(QueryStr,"|"," @") |5 d: e- ?. w# J) S+ z ?* U
'分隔关键字+ [/ V9 u* D d' h; E- C
TempArray=Split(QueryStr," ")
+ X7 n4 }' A( j# X4 b) b . f1 ]. u2 Q( V1 k6 n. R4 M$ ^
For i=0 To UBound(TempArray)- a; b0 |2 D$ M- W
If Left(TempArray(i),1)="@" Then
: v# T# [7 Y! |7 B. q FullQueryStr=FullQueryStr&" Or "&QueryField* ~$ Z0 o9 _, j# q$ j8 z+ I
TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)$ l! `% t7 w8 e; {% R, y" M
Else
+ d7 j* Y2 p0 O) f FullQueryStr=FullQueryStr&" And "&QueryField
6 S; M1 m) z" l6 P# J b; b/ w End If
. L! O; v' H, r. \) ^! X
5 q7 N# b7 n' A1 b5 d If Left(TempArray(i),1)="-" Then
2 [- {& O4 K$ i1 y" M, z x9 B) p FullQueryStr=FullQueryStr&" Not "+ w$ P# z+ @: Z- c
TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)
( E) X1 q, ~' W6 x$ c: q) ^& | End If
( Q6 K. V: _8 T3 h ' B9 s7 ^3 D7 _! X4 k7 U
FullQueryStr=FullQueryStr&" Like '%"&TempArray(i)&"%'"$ B: G" W. z/ p! ~# u0 _
) H/ s0 \8 U/ ^) l) @/ T. ~
FullQueryStr=Replace(FullQueryStr,"%$","")
8 u3 l6 {4 T) q' g% d8 v FullQueryStr=Replace(FullQueryStr,"$%","")8 r# _1 J/ n% F3 r
FullQueryStr=Replace(FullQueryStr,"#"," ")6 S! i m+ h) {6 I! _; V7 X8 J
Next$ q; Q4 }2 N* @ \
: \6 H3 l* e( P! Z2 Q
MakeSQLQuery=FullQueryStr
2 R7 e2 t, q* g3 c) _' Q& N) wEnd Function
1 F! O; O. S' r3 _* G
[ I0 j* I$ m% Z' q" _& X% E8 p, a: s. ]6 f
说明:
L( R/ T! Z& e, l用于搜索时,用户可进行复杂的查找,当前1。0版本只支持单字段的搜索,有心人士可自行修改为支持多字段,但请保留我的版权信息。
8 `% Q( ]5 h$ w; a; `& B: X6 r如有疏忽之处,还请原谅!
1 z% E2 T! f) P. x0 s
3 n B# E: I9 [. o示例:
6 h6 h- [1 P" r9 d3 R ^. @/ |1、 空格连接=and,如 你好 我要=%你好% and %我要%
0 L: w3 S8 e% R. }' p* J! }' C2、 避免内容包含字符=-,如 你好 -我要=%你好% and not like %我要% & v6 I/ \0 Z& A! @( x
3、 |=or,如 你好|我要=%你好% or %我要%
, z* I6 O) M! _; }. c5 @4、 词组搜索用双引号包含,如 \i love this game\=%i love this game%,而非=i and love and this and game
8 g. L: s, L4 J4 @5、 $为定界符,如 $你好=以 你好 开头的字符,你好$=以 你好 结尾的字符 6 ]2 `( m2 | I! b' s' e5 G
9 i( d0 a, j0 W1 M% q组合查询 * d3 F* Y: z0 H, \5 b# f
如 \i love this game\|-你好=%i love this game% and not like %你好% 2 m* N, @2 M( |+ Y
如 我要$|-$你好=%我要 or not like 你好%
k0 r+ p E. s& Q% O如 $\i love this game\ $你好$=i love this game% and like 你好
# |, j& m. e- b( ?0 I7 z! P3 K; i7 t2 t* }
调用:
* y& H& a/ I4 l7 }* h& o& I: e8 E8 J) C5 B
Dim SQL,WSQL
' U. Y9 |" M J* G: J4 ^Dim Keyword,Field
% E/ S" V4 m5 G: u7 W/ r. h1 T" H0 C% O9 | t, |
'get keyword
5 R/ w, V$ V# IKeyword=Request("keyword")/ o$ ^9 u' M( \ V# u
Field=Request("field")
a: W7 o0 x' u* d. o. P) f/ G+ h' j" u: k8 K: Z
WSQL=MakeSQLQuery(Field,Keyword)- J' e( x2 \* B6 o
* @ u+ R* _6 x( o: v
SQL="SELECT * FROM table1 WHERE 1=1 "&WSQL |
|