2012-06-18 2 views
2

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

Я пытаюсь использовать 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

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

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

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

Смежные вопросы