SharePoint常用Caml查询语法及举例
1.CAML语法简介
CAML简称协作应用程序标记语言,基于XML,用来定义SharePoint网站和列表中栏和视图,可以用于定义数据、呈现数据并在编程中实现。本文只对查询模块进行汇总说明。
2.Caml查询语法常见运算符
写在query标签中用于指定条件进行查询,注意区分大小写。
运算符 | 说明 | 功能 |
---|---|---|
And | 且 | 条件拼接 ,并且 |
Or | 或 | 条件拼接 ,或者 |
Where | 位置筛选器 | 在查询上下文中用来指定位置的筛选器 |
FieldRef | 引用栏目声明 | 表示对查询中的字段的引用 |
Value | 值 | 声明条件的值将与 FieldRef 元素返回的值进行比较 |
Now | 当前日期和时间 | 返回当前日期和时间 |
Today | 当前日期 | 返回当前日期 |
Eq | 等于 | 条件声明 ,返回等于XXX的项 |
Gt | 大于 | 条件声明 ,比较运算符大于 |
Lt | 小于 | 条件声明 ,比较运算符小于 |
Geq | 大于等于 | 条件声明,比较运算符大于等于 |
Leq | 小于等于 | 条件声明,比较运算符小于等于 |
Neq | 不等于 | 条件声明,比较运算符不等于 |
IsNull | 为空 | 条件声明,返回为空 (Null) 的项 |
IsNotNull | 非空 | 条件声明,返回为非空 (Null) 的项 |
BeginsWith | 以某字符串开始 | 条件声明,返回以XXX开头的项 |
Contains | 包含 | 条件声明,返回含有XXX的项 |
GroupBy | 分组 | 条件声明,对查询返回的数据进行分组 |
OrderBy | 排序 | 条件声明,对查询返回的数据进行排序 |
3.应用举例
以下根据查询常见的运算符进行举例说明:
1>And
查询LastName为Bagel且FirstName为Jean(两个条件)的所有项
<Query>
<Where>
<And>
<Eq><FieldRef Name="LastName" />
<Value Type="Text">Bagel</Value>
</Eq>
<Eq><FieldRef Name="FirstName" />
<Value Type="Text">Jean</Value>
</Eq>
</And>
</Where>
</Query>
2>Or
查询LastName为Bagel或FirstName为Jean或EnName为James(三个条件)的所有项
<Query>
<Where>
<Or>
<Or>
<Eq><FieldRef Name="LastName" />
<Value Type="Text">Bagel</Value>
</Eq>
<Eq><FieldRef Name="FirstName" />
<Value Type="Text">Jean</Value>
</Eq>
</Or>
<Eq><FieldRef Name="EnName" />
<Value Type="Text">James</Value>
</Eq>
</Or>
</Where>
</Query>
3>Where
参考1>和2>
4>FieldRef
参考1>和2>
5>Value
参考1>和2>
Type后接数据类型,常见有:Integer整型,Text字段类型,DateTime时间类型
6>Now
查询UpdateTime为当前时间的所有项
<Query>
<Where>
<FieldRef Name="UpdateTime" />
<Value Type="DateTime">
<Now />
</Value>
</Where>
</Query>
7>Today
查询LeaveDate为当前日期的所有项
<Query>
<Where>
<FieldRef Name="LeaveDate" />
<Value Type="DateTime">
<Today />
</Value>
</Where>
</Query>
8>Eq
参考1>和2>
9>Gt
查询ID大于3的所有项
<Query>
<Where>
<Gt><FieldRef Name="ID" />
<Value Type="Integer">3</Value>
</Gt>
</Where>
</Query>
10>Lt
查询ID小于3的所有项
<Query>
<Where>
<Lt><FieldRef Name="ID" />
<Value Type="Integer">3</Value>
</Lt>
</Where>
</Query>
11>Geq
查询ID大于等于3的所有项
<Query>
<Where>
<Geq><FieldRef Name="ID" />
<Value Type="Integer">3</Value>
</Geq>
</Where>
</Query>
12>Leq
查询ID小于等于3的所有项
<Query>
<Where>
<Leq><FieldRef Name="ID" />
<Value Type="Integer">3</Value>
</Leq>
</Where>
</Query>
13>Neq
查询ID不等于3的所有项
<Query>
<Where>
<Neq><FieldRef Name="ID" />
<Value Type="Integer">3</Value>
</Neq>
</Where>
</Query>
14>IsNull
查询ID为空(Null)的所有项
<Query>
<Where>
<IsNull>
<FieldRef Name="ID" />
</IsNull>
</Where>
</Query>
15>IsNotNull
查询ID不为空(Null)的所有项
<Query>
<Where>
<IsNotNull>
<FieldRef Name="ID" />
</IsNotNull>
</Where>
</Query>
16>BeginsWith
返回一个Journal列以 “City” 开头为标题的所有项
<Query>
<Where>
<BeginsWith>
<FieldRef Name="Journal" />
<Value Type="Note">City</Value>
</BeginsWith>
</Where>
</Query>
17>Contains
返回一个Journal列包含 “City” 字符为标题的所有项
<Query>
<Where>
<Contains>
<FieldRef Name="Journal" />
<Value Type="Note">City</Value>
</Contains>
</Where>
</Query>
18>GroupBy
查询非空CompanyName并分组(理解为合并相同项)显示所有不同的项标题
关于GroupBy的用法参照SQL中的用法,更多信息推荐浏览关于group by的用法原理
<Query>
<Where>
<IsNotNull>
<FieldRef Name="CompanyName" />
</IsNotNull>
</Where>
<GroupBy>
<FieldRef Name="CompanyName" />
</GroupBy>
</Query>
19>OrderBy
查询 DeadLine为空或大于等于当前日期的所有项并按ID升序返回(Ascending升序为TRUE,降序为FALSE)
<Query>
<Where>
<Or>
<IsNull>
<FieldRef Name="DeadLine" />
</IsNull>
<Geq>
<FieldRef Name="DeadLine" />
<Value Type="DateTime">
<Today />
</Value>
</Geq>
</Or>
</Where>
<OrderBy>
<FieldRef Name="ID" Ascending="TRUE" />
</OrderBy>
</Query>
参考
以上为个人整理总结的知识,如有遗漏或错误欢迎留言指出、点评,如要引用,请联系通知,未经允许谢绝转载。
[1]: https://docs.microsoft.com/zh-cn/sharepoint/dev/schema/query-schema