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。
我有一个 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。