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

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

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

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

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

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

2 ответа

Решение

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

Вы можете создать представление, в котором вы ищете любую запись выше 2009 года (начиная с правого 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>

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

Другие вопросы по тегам