【问题标题】:SQLite and STRFTIMESQLite 和 STRFTIME
【发布时间】:2015-10-31 02:22:47
【问题描述】:

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

 00:01:100

我想以毫秒为单位选择具有 MAX 值的行,并且我找到了 strftime 函数。我正在尝试:

  SELECT MAX(strftime("%M:%S:%SSS", field)) FROM table;

但它不起作用。

【问题讨论】:

  • 嗯,这行不通,因为你不能只是编造时间格式。没有规定像这样存储厘秒。它们以小数形式存储sqlite.org/lang_datefunc.html
  • 100 厘秒通常被视为 1 秒;你是说毫秒吗?
  • 只使用 MAX() 而不使用 strftime()。你觉得它有什么作用?
  • 该字段中的最大值,不起作用。

标签: mysql sql database sqlite qsqlquery


【解决方案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

【讨论】:

  • @helloimyourmind。我回去检查了一堆东西。终于得到了一个带有 SQLFiddle 链接的运行示例
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多