SQLite和STRFTIME

时间:2015-10-31 02:22:48

标签: mysql sql database sqlite qsqlquery

在我的SQLite数据库中,我有一个包含分钟,秒和厘秒的时间字段:

    today=date.today()
    start=(today.year-1,today.month,today.day)
    quotes=quotes_historical_yahoo('AXP',start,today)
    fields=['Date','Open','High','Low','Close','Vol']
    list1=[]
    for i in range(0,len(quotes)):
        x=date.fromordinal(int(quotes[i][0]))
        y=date.strftime(x,'%Y-%m-%d')
        list1.append(y)
    df = pd.DataFrame(quotes,index=list1,columns=fields)
    df=df.drop(['date'],axis=1)

我想选择具有MAX值的行(以毫秒为单位),并设置 strftime 函数。我正在尝试:

 00:01:100

但它不起作用。

1 个答案:

答案 0 :(得分:1)

因为这不在允许的格式列表中,所以您必须先对其进行编辑,以便支持它。

然后运行strftime函数

SELECT MAX(strftime("%H:%M:%f", "00:" || substr(field,1,3) || replace(':','.',substr(field,4)))) FROM table;

应该不起作用

编辑

所以,更新。为什么它不起作用:

当您已经拥有格式的时间并且想要将其转换为其他格式时,

strftime非常有用。

您拥有不受支持的格式的项目。 (List of formats here)。因此,您可能以默认的TEXT格式保存它。

因此,现在您需要编写一个查询,将此文本转换为正确的格式并进行比较。你基本上必须编写自己的最大化函数,它将把这个文本转换成MAX函数可以处理的东西。

这是通过子串和铸造的组合完成的。我在下面的查询中所做的是将子串转换为整数,将它们相乘以将它们转换为秒,然后将其添加到MAX

SELECT time,MAX(cast(substr(time,1,2) as integer)*60+cast(substr(time,4,2) as integer )+cast(substr(time,7,3) as integer)/100) FROM t;

以下是运行

的示例

http://sqlfiddle.com/#!7/1c665/1