Wolfram mathematica 如何从Mathematica中的SQLDateTime对象提取日期

Wolfram mathematica 如何从Mathematica中的SQLDateTime对象提取日期,wolfram-mathematica,sqldatetime,Wolfram Mathematica,Sqldatetime,我正试图用DateListPlot绘制一个时间序列。我想给它提供一个从SQL数据库获取的时间序列。当我检索时间序列时,列表由SQLDateTime条目组成,而DateListPlot无法理解这些条目 在[24]:=t=SQLExecute[conn,“按时间戳asc选择时间戳,时间序列顺序中的值”] Out[24]={{SQLDateTime[{2010,1,1}],12.3},{SQLDateTime[{2010,1,2}],12.51} 不起作用: In[25]:=DateListPlot[

我正试图用
DateListPlot
绘制一个时间序列。我想给它提供一个从SQL数据库获取的时间序列。当我检索时间序列时,列表由
SQLDateTime
条目组成,而
DateListPlot
无法理解这些条目

在[24]:=t=SQLExecute[conn,“按时间戳asc选择时间戳,时间序列顺序中的值”]

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

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

DateListPlot
需要一个日期元组,但不理解SQLDateTime。我能做什么?

答案是:

In[1]:= SQLDateTime[{2001, 5, 7}][[1]]
Out[1]:= {2001,5,7}
Mathematica在内部对所有事物的看法都非常相似。你所看到的
{1,2,3}
实际上是
列表[1,2,3]
。零件函数(由
[…]]
表示)在任何函数上都同样有效,而不仅仅是
列表

在您的案例中应用此功能的快捷方式:

{#[[1,1]],#[[2]]}& /@ SQLExecute[...]

执行类似于
SQLExecute[…]的操作可能更高效、更清晰。SQLDateTime[l_U3;]:>l
SQLExecute[…]/。SQLDateTime->Identity
当您有多列
SQLDateTime
对象时。另外,
DateListPlot
理解整数Unix样式的时间戳,因此您可以用
AbsoluteTime
替换
SQLDateTime
来转换为这些时间戳,因为
AbsoluteTime[{timespec…}]
给您一个时间戳。是的,我确实称之为快速和肮脏。就代码量而言,使用规则肯定更清晰、更高效。但是,我不确定规则是否通常更快,因为它必须搜索所有内容,而如果您知道数据的结构,则可以使用类似的方法,除了您知道发生SQLDateTime的位置之外,不必检查任何内容。