SQLite 日期格式为 String/Text 但没有前导零 - 如何获取日期?

SQLite Date Formatted as a String/Text but has no leading zero - How can I get the date?

我已经从内部数据源导入了一个 csv 到 sqlite 数据库。

我无法控制内部数据源如何格式化他们的数据以供我提取为。

我的问题是日期字段,特别是月份,没有前导零。

提取具有相同字符串位置的日期有点问题。

这是一些示例数据:

1/15/2021
10/16/2018
3/17/2019
5/12/2020

问题是位置不像每个日期都有前导零那样严格。由于我无法控制数据是如何发送给我的,所以我只能控制如何解析它。

我是 SQLite 的新手,虽然我在 Oracle/SQL 很多年前使用过服务器。

有什么提示或建议吗?

感谢您的宝贵时间。

您需要字符串函数将您的日期转换为 YYYY-MM-DD

使用 CASE 表达式,它使用运算符 LIKE:

检查所有可能的格式
CASE 
  WHEN date LIKE '_/_/____' THEN SUBSTR(date, -4) || '-0' || SUBSTR(date, 1, 1) || '-0' || SUBSTR(date, 3, 1)
  WHEN date LIKE '_/__/____' THEN SUBSTR(date, -4) || '-0' || SUBSTR(date, 1, 1) || '-' || SUBSTR(date, 3, 2)
  WHEN date LIKE '__/_/____' THEN SUBSTR(date, -4) || '-' || SUBSTR(date, 1, 2) || '-0' || SUBSTR(date, 4, 1)
  ELSE SUBSTR(date, -4) || '-' || SUBSTR(date, 1, 2) || '-' || SUBSTR(date, 4, 2)
END

或者,使用 printf() 函数:

SUBSTR(date, -4) || '-' ||
printf('%02d', date + 0) || '-' ||
printf('%02d', SUBSTR(date, INSTR(date, '/') + 1) + 0)

参见demo