将SQL查询转换为CAML查询

时间:2016-12-04 14:26:40

标签: sharepoint

我是CAML查询的新手,尽管我已经预料到它像SQL一样简单但我发现它很难处理。我有一个简单的查询SQL查询我试图转换为CAML但没有收到预期的结果。

Sql:select * from exchangeRates where (date='2016-12-01' and currency<>'DKK')

或者

(date='2016-11-25' and currency_Type = 'Manual')

感谢任何帮助。感谢。

1 个答案:

答案 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公式进行思考会有所帮助。 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

在不知道列的内部名称是什么的情况下,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>