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。
我已经从内部数据源导入了一个 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。