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"}] ) 内的所有情况。如何指定对这些案例的搜索?

最佳答案

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"}] 仅考虑今天的日期而不考虑当前时间的问题。

关于wolfram-mathematica - 选择 SQLDateTimes 的范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6986546/

10-09 07:53