CAML查询:比较日期时间和相等性

5
我正在尝试组合一个 CAML 查询,比较两个 DateTime 对象,但是我无法使用 Eq 比较让它正常工作。通过我的测试,我可以使用 Gt、Lt、Geq、Leq 进行 DateTime 比较,但是 Eq 似乎根本不起作用。
第一个对象是日期和时间字段(由 InfoPath 生成,并保存到 SharePoint 列表中的日期和时间字段),当前示例为“2012 年 3 月 14 日上午 12:00”。我已经尝试使用 [Today/] 值,使用硬编码值 ISO 格式 2012-03-14T00:00:00Z,但迄今为止没有任何进展。我尝试使用 IncludeTimeValue,将其设置为 true/false,但都没有改善。
我的当前查询看起来像这样:
<Query>
 <Where>
  <Eq>
   <FieldRef Name="SomeDateTimeField" IncludeTimeValue="TRUE" />
   <Value Type="DateTime" IncludeTimeValue="TRUE">2012-03-14T00:00:00Z</Value>
  </Eq>
 </Where>
</Query>

这个代码没有返回任何值,即使我列表中有对应的日期和时间。你有什么思路吗?


我想在此期间只是检查它是否在Gt/Lt范围内,以确定它是否为特定日期,而不是使用Eq来执行此操作。这有点让查询变得更加丑陋,但到目前为止它还可以工作。 - ferr
你必须去掉值周围的引号。 - ktharsis
抱歉,那篇文章中有一个打字错误,实际代码并不反映这一点。 - ferr
2个回答

3

等式语句无法返回任何结果,因为它只能计算秒数。 请尝试使用日期范围。示例:

<Where>
 <And>
  <Gt>
   <FieldRef Name='Created' />
   <Value IncludeTimeValue='TRUE' Type='DateTime'>2014-12-10T00:00:00Z</Value>
  </Gt>
  <Lt>
   <FieldRef Name='Created' />
   <Value IncludeTimeValue='TRUE' Type='DateTime'>2014-12-10T23:59:59Z</Value>
  </Lt>
 </And>
</Where>

请注意,我们使用相同的日期,但不同的时间。

2
这个能用吗?
<Query><Where><Eq><FieldRef Name="SomeDateTimeField"/><Value IncludeTimeValue='TRUE' Type='DateTime'>2012-03-14T00:00:00</Value></Eq></Where></Query>

1
由于它将返回字段"SomeDateTimeField" = 2012-03-14T00:00:00的项目。如果字段值相差超过一秒钟,结果将为空。 - Alexander Ulmaskulov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接