Использование части даты в запросе CAML

Столбец заголовка в моем списке содержит только год. Я хочу сделать вид, в котором я бы отображал только последние 3 года.

Я пытаюсь использовать запрос CAML в определении списка:

<Query>
  <Where>
    <Geq>
      <FieldRef Name="Year" />
      <Value Type="Number"> ???? </Value>
    </Geq>
  </Where>
</Query>

Я пытался что-то здесь получить, используя элемент <Today> с атрибутом Offset, но безуспешно - это не значение DateTime, а только число.

Как написать здесь условие фильтрации?


person Tschareck    schedule 18.06.2012    source источник


Ответы (2)


Поскольку это не значение datetime, оно никогда не будет работать с <Today> и offset, потому что эти элементы внутренне преобразуются в значение SQL DateTime в зависимости от момента выполнения запроса.

Вы можете создать представление, в котором вы ищете любую запись выше 2009 года (по праву 2012 года), но это потребует дополнительной незначительной работы каждый год для адаптации.

Я бы предложил, если возможно, создать поле только для реальной даты и работать с ним (и, возможно, отображать только вычисляемое поле на основе этого значения).

person Francois Verbeeck    schedule 18.06.2012

Я бы рекомендовал сделать это в два этапа:

  1. Создайте вычисляемое поле типа DateTime (без времени), используя описанные здесь формулы http://msdn.microsoft.com/en-us/library/bb862071.aspx. Это будет примерно так = ДАТА (Год-3,0,0)
  2. Выполните запрос, используя этот новый столбец. Что-то вроде
<Geq>
        <FieldRef Name="YearCalculated" />
        <Value Type="DateTime" IncludeTimeValue="FALSE"><Today /></Value>    
</Geq>

Подход со смещением = "- 1095" также может работать, но я думаю, что вычитание значения года в вычисляемом поле будет работать лучше. Кроме того, при необходимости вы всегда можете сделать свое вычисляемое поле невидимым в формах просмотра.

person Alexey Shcherbachev    schedule 18.06.2012