Sqlite将字符串转换为时间

juzqafwq  于 2023-01-26  发布在  SQLite
关注(0)|答案(1)|浏览(328)

有很多例子,但没有一个有我的确切规格。我从一个csv文件中获得一个时间,格式为7:40 AM,作为字符串。没有前导0。MySql工作SELECT STR_TO_Date(“7:40 PM”,“%h:%i %p”)AS StartTime返回19:40:00我需要它用于Order By子句
我怎样才能在Sqlite中做到这一点?

idfiyjo8

idfiyjo81#

不幸的是,Sqlite没有提供任何简洁的内置解决方案来解决这个问题。实际上,没有任何规定来满足时间字符串中的AM/PM。但是,您可以使用一些变通方法,尽管它确实涉及到将时间字符串转换为可以操作的格式。首先,您必须用前导零填充任何小于10小时的字符串。使用iif语句就足够简单了:

"SELECT iif(length(TimesString) =  7, '0' || TimesString, TimesString) from table"

接下来,您需要调整AM/PM的时间字符串。此问题已在以下答案中详细说明:How to order by date/time with AM/PM in SQLITE。但简单地说,它建议先用case语句按am/pm排序,然后再按时间排序:

ORDER BY (case when PaddedTime like '% am' then 1 else 2 end), PaddedTime

因此,您的完整陈述如下所示:

SELECT TimeString, iif(length(TimesString) =  7, '0' || TimesString, TimesString) AS PaddedTime from table ORDER BY (case when PaddedTime like '% am' then 1 else 2 end), PaddedTime

然而,在时间是12 AM的情况下,这将失败。在这里,您必须添加一个额外的iif语句来将“12”转换为“00”。我将让您尝试一下,但如果您遇到困难,请告诉我,我会帮助您

相关问题