符号 描述
* 包含指定的匹配字符串同时还包含其他0个或更多的字符。这同dir命令中使用的*十分类似。如以b开头,以d结尾的字符串的匹配条件为b|*d。
? 包含指定的匹配字符串同时还包含其他0个或一个字符。如满足b|?d匹配条件的字串包括bd、bad和bed等。
+ 包含指定的匹配字符串同时还包含其他1个或更多的字符。如满足b|+d匹配条件的字串包括bad、bed和bond等。
( ) 用于界定模式匹配,表明在其中的是模式匹配字符条件。当条件多于一个时使用。
{ } 用于界定匹配数量,表明在其中的是模式匹配数量条件。
[ ] 用来在模式条件中指明一个字符串的范围。
| 一个转义符,要求在上面的每个符号前使用它。从而将其同普通字符区别开来。
下面通过几个简单的例子来说明MATCHES谓词的使用方法。
查找文件内容中出现"SQL"三次的文件:
...WHERE MATCHES (DocText, ''|(SQL|)|{3|}'' ) > 0
查找文件内容中出现"SQL"三次以上的文件:
...WHERE MATCHES (DocText, ''|(SQL|)|{3,|}'' ) > 0
查找文件内容中出现"SQL"三次到十次之间的文件:
...WHERE MATCHES (DocText, ''|(Bora|)|{3,10|}'' ) > 0
当你不能确定作者姓名中包含"Pellow"还是"Pelow"时,可以使用下面的条件语句:
...WHERE MATCHES( DocAuthor, ''* Pel|{1,2|}ow'' ) > 0
ARRAY:用于在两个排列(也称为矢量)之间通过逻辑运算符来进行比较。其语法结构如下:
Column_Reference Comparison_Operator [ ALL | SOME ] ARRAY [ Array_Elements ]
其中Column_Reference用于比较的文件属性,可以是多个属性。但是要求其数据类型同后面的Array_Elements相匹配。
Comparison_Operator为比较运算符,它可以是=、!=(不等于)、>、=>、<、<=。
Array_Elements用于指明用于进行比较的排列,其必须用"[]"括起来。空的排列也是允许的,比如下面的查询也是合法的。
SELECT foo FROM SCOPE() WHERE bar = ARRAY[]
ALL和SOME则用来指明对Array_Elements使用不同的比较方式。对于All,将会对左侧排列中的每个元素同右侧排列中相应的元素进行比较。比如下面的表达式对于ALL,表达式结果为假:
[1,2,3] > ALL ARRAY [1,2]
而对于SOME,则只要在左侧排列中有一个值同右侧排列中所有的值比较复合条件即可。因此下面的表达式对于SOME,其表达式结果为真:
[1,2,3] > SOME ARRAY [2,1]
因为在左侧排列中的3,比右侧排列中的2和1都大因此返回值为真。
如果不指明ALL或SOME,将会按照从左至右的顺序对表达式左侧排列中的元素同右侧中相应的元素进行比较。而一旦两者不同,将直接返回比较结果而不再继续进行其他元素的比较。而如果所有比较的值都相等,则根据排列的势来决定最后的比较结果。因此下列表达式的值都为真。
ARRAY [2,3,4] > ARRAY [1,2]
ARRAY [2,3,4] > ARRAY [1,2,3]
ARRAY [2,3,4] > ARRAY [1,2,3,4]
ARRAY [2,3,4] > ARRAY [1,2,5]
ARRAY [2,3,4] > ARRAY [2,3,3]
ARRAY [2,3,4] > ARRAY [2,3]
ARRAY [2,3,4] < ARRAY [2,3,4,5]
ARRAY [2,3,4]!= ARRAY [2,3,4,5]
下面通过几个例子来说明ARRAY谓词的使用方法:
查找所有文件属性为"存档"的文件:
...WHERE attrib = ARRAY [ 0X820 ]
查找所有文件属性为"存档"或"压缩"(针对于NTFS文件系统)的文件:
...WHERE attrib = SOME ARRAY [0X820 ]
查找矢量值为[10,15,20]的ActiveX文档:
...WHERE vectorprop = ARRAY [10, 15, 20]
通过SQL Server查询Index Server
0
相关文章