如何从Mathematica中的SQLDateTime对象中提取Date

and*_*ewz 5 wolfram-mathematica sqldatetime

我正在努力做一个时间序列的情节DateListPlot.我想提供一个从SQL数据库中获取的时间序列.当我检索时间序列时,列表由不理解的SQLDateTime条目组成DateListPlot.

In[24]:= t=SQLExecute[conn, "select timestamp,value from timeseries order by timestamp asc"]

Out[24]={{SQLDateTime[{2010,1,1}],12.3},{SQLDateTime[{2010,1,2}],12.51}}

不起作用: In[25]:= DateListPlot[t]

DateListPlot需要一个Date元组,并且不理解SQLDateTime.我能做什么?

Cas*_*bel 7

答案:

In[1]:= SQLDateTime[{2001, 5, 7}][[1]]
Out[1]:= {2001,5,7}
Run Code Online (Sandbox Code Playgroud)

Mathematica在内部非常类似地思考所有事情.你看到{1, 2, 3}的实际上是什么List[1,2,3].Part函数(表示为[[...]])在任何函数上都可以正常工作,而不仅仅是List.

在您的情况下应用此方法的快速而肮脏的方式:

{#[[1,1]],#[[2]]}& /@ SQLExecute[...]
Run Code Online (Sandbox Code Playgroud)

  • 做一些像`SQLExecute [...] /这样的事情可能会更有效率和更清晰.SQLDateTime [l _]:> l`或`SQLExecute [...] /.SQLDateTime - > Identity`,当你有多列`SQLDateTime`对象时.此外,`DateListPlot`理解整数Unix风格的时间戳,因此您可以将`SQLDateTime`替换为'AbsoluteTime`以转换为那些,因为`AbsoluteTime [{timespec ...}]`为您提供时间戳. (3认同)