3
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.`}]}}

我想返回tableSQLDateTime 在去年(DatePlus[{-1, "Year"}])内的所有情况。如何指定对这些案例的搜索?

4

2 回答 2

6

你也可以使用DateDifference

Cases[table, {a_, SQLDateTime[b_]} /; 
  DateDifference[b, DateList[], "Year"][[1]] <= 1]
于 2011-08-08T18:50:18.033 回答
4
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.}]}
        } 
*)

小更新(Date[] 的预缓存,基于 Leonid 的评论):

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

这也消除了原始的问题DatePlus[{-1, "Year"}],它只考虑今天的日期而不考虑当前时间

于 2011-08-08T18:54:42.297 回答