|
'====================================================================& F" z$ ^& Y, ?" g
'= Copyright (c) 2005 Eason Chan All Rights Reserved.8 N- u! k: T9 Z0 x# F; u9 s, H
'=-------------------------------------------------------------------
! y1 v/ w2 {4 j O2 D. ^# S'= 摘 要:格式化搜索字符函数
4 G; L6 v7 L9 T'=-------------------------------------------------------------------
, Z8 y1 G/ G) T: S5 B'= 最后更新:eason0076 t/ ~6 f' `& i: f
'= 最后日期:2005-01-21+ b+ h% o; k! d9 ]$ @0 l
'====================================================================6 a5 F1 Y: J3 Z( y- n
Function MakeSQLQuery(QueryField,QueryStr) B3 c1 c" X6 U7 _5 o; O/ ^/ p
Dim TagStart,TagEnd
7 D0 B9 I* J! v+ |% Y2 q Dim TempStr,TempArray
* j, \/ Z1 S5 J1 n Dim FullQueryStr
! L; s' V: L+ w g) b Dim i,Way
. }; U9 U- }& Q4 F. U ' }, r" j* N/ Q2 P
'先找引号定界符
1 F" R% m- V& K1 ? Do
, n" d$ T! L; s' p6 o. _ TagStart=InStr(QueryStr,"\")7 N: i. ], V2 y. {
If TagStart>0 Then
8 o8 v" d+ w2 u7 a+ n! p TagEnd=InStr(TagStart+1,QueryStr,"\")
' T' M+ ^7 w1 o, P3 Y
( C7 [1 _* E; l" T TempStr=Mid(QueryStr,TagStart+1,TagEnd-TagStart-1)
2 M, N" j) z9 R( p# _( F TempStr=Replace(TempStr," ","#")
6 L7 F% R4 n. ?6 H! J 7 I9 u! `+ {& M' x4 k9 H
QueryStr=Left(QueryStr,TagStart-1)&TempStr&Right(QueryStr,Len(QueryStr)-TagEnd)
; |; D) r2 e6 Y/ f" j& J! M End If
7 n8 X. u2 f% j i5 \0 m8 G Loop While TagStart>0, X/ V: C |% b4 j7 W4 U
1 V4 n) p3 ~0 W '处理or定界符
. h ~1 v: Z% m0 o QueryStr=Replace(QueryStr,"|"," @")0 V) C1 p6 p' L+ p# z7 W9 _
'分隔关键字
; ]( _: r% P! ^& G8 o, Z2 k TempArray=Split(QueryStr," "); j+ L7 p' k- `% F
+ x0 x7 F4 ^1 y% l6 F) {* h
For i=0 To UBound(TempArray)& a ^5 N, q. X6 e2 s1 M3 A7 T
If Left(TempArray(i),1)="@" Then
- i+ T9 X# y" d, ]" u# M) c FullQueryStr=FullQueryStr&" Or "&QueryField
$ ?9 O* t2 P2 \ TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)
7 n$ ?3 s: W3 X1 _ Else( R7 \5 z& d! m) Y/ c( M
FullQueryStr=FullQueryStr&" And "&QueryField
( ?4 d* h) G: _ End If
( U U; F+ T6 h( Z3 P$ e
& ~% _% k: ^+ _% [( k1 P If Left(TempArray(i),1)="-" Then ) k3 H, D' r5 {# u
FullQueryStr=FullQueryStr&" Not "
# |- J$ T0 _8 U& M TempArray(i)=Right(TempArray(i),Len(TempArray(i))-1)
A& v" b" Q4 Z9 }* h End If
! j; z$ D2 x$ N1 v$ Y7 @- j5 { # {/ v0 x3 |4 _3 I* e/ a, ^' H. [
FullQueryStr=FullQueryStr&" Like '%"&TempArray(i)&"%'"
0 u$ [+ `+ N: T- e+ w
/ U5 i9 y) V8 ~0 x& @/ L FullQueryStr=Replace(FullQueryStr,"%$","")
6 Q" Y9 @! V$ U6 y+ V7 k" R* M FullQueryStr=Replace(FullQueryStr,"$%","")3 R2 h3 Z$ Q' I7 L* R2 {. x
FullQueryStr=Replace(FullQueryStr,"#"," ")$ Z; t5 p; M$ T1 W( P/ f6 k
Next1 ?' x( w6 E# d) r3 k! e+ i
" X4 `% ~6 h) f4 g3 f9 F MakeSQLQuery=FullQueryStr
" z2 F n9 _0 ?End Function
& [& t7 m- m: Z, |
1 }) d) V9 A4 j% V/ a' j2 V ~) _7 b5 A( ?
说明:, M! w' T1 G8 ^/ T
用于搜索时,用户可进行复杂的查找,当前1。0版本只支持单字段的搜索,有心人士可自行修改为支持多字段,但请保留我的版权信息。
7 `' ?- Y. @! C: P如有疏忽之处,还请原谅!8 n' Y, y, J& S( X# t* j$ T
% ~' w8 x- m8 d; N1 P9 k3 e- |
示例:
6 D2 Y, Q: p% }; f1 u- B) |6 P1、 空格连接=and,如 你好 我要=%你好% and %我要% 2 `7 }/ N5 Q; U" z5 y9 ~
2、 避免内容包含字符=-,如 你好 -我要=%你好% and not like %我要%
/ y7 Y q* C0 h& L7 N3、 |=or,如 你好|我要=%你好% or %我要%
/ x8 t: W! g* }. T. ~' b9 n( b4、 词组搜索用双引号包含,如 \i love this game\=%i love this game%,而非=i and love and this and game
/ y/ i% B* l9 ` {5、 $为定界符,如 $你好=以 你好 开头的字符,你好$=以 你好 结尾的字符
/ h7 [: l6 Y* H* N0 A' c8 n. Y! r, ` D1 @. F! ?. f$ y3 c0 N. l4 _
组合查询 ( ]( A2 @* m4 j7 r) z; \' \
如 \i love this game\|-你好=%i love this game% and not like %你好%
; o5 A: ?5 V+ s( M& X- m' C如 我要$|-$你好=%我要 or not like 你好% # Q) h6 i# B7 Q, F# ?2 E, G( g( l
如 $\i love this game\ $你好$=i love this game% and like 你好 ; v: j* P9 V( v6 q4 N: R6 v: D$ A
6 r) r! J' |, N! P调用:4 K! q; Z7 t! d, R6 e6 P
2 n7 e9 |, {+ P3 ]Dim SQL,WSQL! t$ M7 e' T: H+ r7 m: b; w
Dim Keyword,Field
3 T1 f2 h6 ~4 H" q$ M3 L' w/ Z" ~; Y; G
'get keyword- g% }5 k! |" n0 B1 E
Keyword=Request("keyword")5 D- P* g9 H# s/ T
Field=Request("field")
e: i. O3 O" ?5 }- G+ a7 |* q; a: v
WSQL=MakeSQLQuery(Field,Keyword). d# T/ A) [: c( y
8 E9 U4 V+ F! y3 O2 |2 bSQL="SELECT * FROM table1 WHERE 1=1 "&WSQL |
|