Выберите диапазон SQLDateTimes - PullRequest
       8

Выберите диапазон SQLDateTimes

3 голосов
/ 08 августа 2011
table = {{ID1, SQLDateTime[{1978, 1, 10, 0, 0, 0.`}]}, 
{ID2, SQLDateTime[{1999, 1, 10, 0, 0, 0.`}]}, 
{ID3, SQLDateTime[{2010, 9, 10, 0, 0, 0.`}]}, 
{ID4, SQLDateTime[{2011, 1, 10, 0, 0, 0.`}]}}

Я бы хотел вернуть все случаи в table, в которых SQLDateTime находится за последний год (DatePlus[{-1, "Year"}]).Как мне указать поиск для этих случаев?

Ответы [ 2 ]

6 голосов
/ 08 августа 2011

Вы также можете использовать DateDifference:

Cases[table, {a_, SQLDateTime[b_]} /; 
  DateDifference[b, DateList[], "Year"][[1]] <= 1]
4 голосов
/ 08 августа 2011
Select[table, (AbsoluteTime[ DatePlus[{-1, "Year"}]] <= 
    AbsoluteTime[ #[[2, 1]]] <= AbsoluteTime[ ] &)]

(* ==> {{ID3, SQLDateTime[{2010, 9, 10, 0, 0, 0.}]}, 
        {ID4,SQLDateTime[{2011, 1, 10, 0, 0, 0.}]}
        } 
*)

Небольшое обновление (предварительное кэширование даты [], основываясь на комментариях Леонида):

With[
 {date = Date[]},
 Select[table, 
    (AbsoluteTime[ DatePlus[date, {-1, "Year"}]] <= 
     AbsoluteTime[ #[[2, 1]]] <= AbsoluteTime[date ] &)]
 ]

Это также устраняет проблему с оригинальным DatePlus[{-1, "Year"}], который занимает только сегодняшнее дата , а не текущее время .

...