我是CAML查询的新手,尽管我已经预料到它像SQL一样简单但我发现它很难处理。我有一个简单的查询SQL查询我试图转换为CAML但没有收到预期的结果。
Sql:select * from exchangeRates where (date='2016-12-01' and currency<>'DKK')
或者
(date='2016-11-25' and currency_Type = 'Manual')
感谢任何帮助。感谢。
答案 0 :(得分:1)
使用<Eq>
元素查找字段等于指定值的项目和<Neq>
元素,以查找字段不等于指定值的项目。
<Eq>
<FieldRef Name="Internal_Name_Of_Date_Field" />
<Value Type="DateTime">2016-12-01</Value>
</Eq>
CAML使用<And>
和<Or>
元素在<Where>
子句中将条件连接在一起。
<And>
<Eq>
...
</Eq>
<Neq>
...
</Neq>
</And>
每个<And>
或<Or>
元素都需要完全两个子节点,这些节点是连接在一起的条件。
子节点可以是另一个<And>
或<Or>
元素,允许您将嵌套条件连接在一起,以适应任意复杂的条件。
<Or>
<And>
...
</And>
<And>
...
</And>
<Or>
有时,根据Excel公式进行思考会有所帮助。 Excel函数OR()
和AND()
可以使用两个参数(条件)来返回布尔值。因此,CAML语法和Excel语法非常相似:CAML只使用XML元素而不是括号。
英语:(A and B) or (C and D)
Excel:OR( AND(A, B), AND(C, D) )
CAML:<Or> <And> A B </And> <And> C D </And> </Or>
在不知道列的内部名称是什么的情况下,CAML查询的<Where>
元素可能如下所示:
<Where>
<Or>
<And>
<Eq>
<FieldRef Name="Internal_Name_Of_Date_Field" />
<Value Type="DateTime">2016-12-01</Value>
</Eq>
<Neq>
<FieldRef Name="Internal_Name_Of_Currency_Field" />
<Value Type="Text">DKK</Value>
</Neq>
</And>
<And>
<Eq>
<FieldRef Name="Internal_Name_Of_Date_Field" />
<Value Type="DateTime">2016-11-25</Value>
</Eq>
<Eq>
<FieldRef Name="Internal_Name_Of_Currency_Type_Field" />
<Value Type="Text">Manual</Value>
</Eq>
</And>
<Or>
</Where>