SQLite 不完整的时间字符串

SQLite Incomplete Time String

我有一个 table 的时间字符串不完整,例如“0:09.735”(分钟:seconds.milliseconds)。

由于函数 strftime 需要某些格式,例如 '%H:%M:%f',我必须先“完成”不完整的时间字符串。

SELECT
  strftime('%M:%f', '00:00:09.735', '+2.5 seconds') AS Duration1, -- works correctly
  strftime('%M:%f', '0:00:09.735',  '+2.5 seconds') AS Duration2, -- shows NULL
  strftime('%M:%f', '0:09.735',     '+2.5 seconds') AS Duration3, -- shows NULL
  strftime('%M:%f', '9.735',        '+2.5 seconds') AS Duration4  -- shows incorrect result

具有完整时间字符串的第一个 strftime 函数显示正确的结果,具有不完整时间字符串的第二个、第三个和第四个函数则没有。

是否有一种灵活的方法可以将所有形式的不完整时间字符串转换为完整时间字符串?

假设点和毫秒总是存在的,你可以使用字符串函数来操作时间:

SELECT strftime(
         '%M:%f',
         SUBSTR('00:00:00', 1, 9 - INSTR(timestring, '.')) || timestring, 
         '+2.5 seconds'
       ) result
FROM tablename

timestring 替换为列名。

不过更新专栏会更好:

UPDATE tablename
SET timestring = SUBSTR('00:00:00', 1, 9 - INSTR(timestring, '.')) || timestring

所以你有 SQLite 的有效时间值。

参见demo