我已将csv从内部数据源导入sqlite数据库。
我无法控制内部数据源如何将其数据格式化为.
我的问题是日期字段,特别是月份,没有前导零。
提取字符串位置相同的日期有点麻烦。
以下是一些示例数据:
1/15/2021
10/16/2018
3/17/2019
5/12/2020
问题是,这种立场并不像每个日期都有一个前导零那么严格。由于我无法控制数据是如何发送给我的,我只能控制我如何解析它
我是SQLite的新手,尽管我多年前就使用过Oracle/SQL Server。
有什么建议吗?
谢谢你抽出时间。
您需要字符串函数将日期转换为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)
请参阅演示