如何解析KMyMoney导出SQLite中的特殊会计数字格式?
解决KMyMoney导出SQLite数据的金额解析问题
一、转换valueFormatted的会计格式金额
针对括号表示负数的会计格式,可通过字符串替换和条件判断将其转为标准数字格式,再转换为浮点数:
SELECT -- 先转成标准数字文本,再转为浮点数 CAST( CASE WHEN valueFormatted LIKE '(%)' THEN '-' || REPLACE(REPLACE(valueFormatted, '(', ''), ')', '') ELSE valueFormatted END AS FLOAT ) AS amount FROM kmmSplits;
逻辑说明:
- 用
LIKE '(%)'识别带括号的负数格式 - 两次
REPLACE去掉括号,前置负号转为标准负数写法 - 正数直接保留原文本,最后统一
CAST为浮点数
二、计算value字段的除法等式
SQLite没有内置执行字符串表达式的功能,需拆分除法字符串后手动计算:
SELECT value, -- 拆分被除数和除数,计算实际值 CAST(SUBSTR(value, 1, INSTR(value, '/') - 1) AS FLOAT) / CAST(SUBSTR(value, INSTR(value, '/') + 1) AS FLOAT) AS calculated_amount FROM kmmSplits;
逻辑说明:
- 用
INSTR(value, '/')定位除法符号的位置 - 用
SUBSTR拆分出被除数(/前的内容)和除数(/后的内容) - 分别转为浮点数后执行除法运算
- 如果
value带空格(比如"1234 / 100"),可先加REPLACE(value, ' ', '')去除空格再拆分
内容的提问来源于stack exchange,提问作者user1526973
相关产品推荐
相关产品推荐

