Использование части даты в запросе 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 года), но это потребует дополнительной незначительной работы каждый год для адаптации.
Я бы предложил, если это возможно, создать поле только для реальной даты и работать с ним (и, возможно, отображать только вычисленное поле на основе этого значения).
Я бы порекомендовал сделать это в два этапа:
- Создайте вычисляемое поле типа DateTime (без времени), используя формулы, описанные здесь http://msdn.microsoft.com/en-us/library/bb862071.aspx. Это будет что-то вроде этого = ДАТА (Год-3,0,0)
- Сделайте запрос, используя этот новый столбец. Что-то вроде
<Geq> <FieldRef Name="YearCalculated" /> <Value Type="DateTime" IncludeTimeValue="FALSE"><Today /></Value> </Geq>
Подход с Offset="-1095" также может работать, но я думаю, что вычитание значения года в вычисляемом поле будет работать лучше. Кроме того, вы всегда можете сделать вычисленное поле невидимым в формах просмотра, если это необходимо.