如何解析SQLite字段中的会计编号格式?

k5ifujac  于 2023-02-05  发布在  SQLite
关注(0)|答案(1)|浏览(130)

我是SQLite(和KMyMoney)的新手,KMyMoney(一个开源的个人财务管理器)允许一键导出数据到SQLite数据库中。
浏览SQLite数据库输出时,美元金额数据以基于“value”和“valueFormated”的奇怪格式存储在名为kmmSplits的表中,作为多个文本字段(见下面的屏幕截图)。“value”字段显然被写成除法方程(文本格式),这显然会生成“valueFormatted”字段(同样是文本格式)。“valueFormatted是正确的数字金额,但问题是括号被用来表示负数,而不是值前面的简单减号。这显然是一种会计数字格式,但我不知道如何将其解析为浮点值以运行计算SQL查询等。正值(不带括号)转换为FLOATS没有问题。
我试过使用CAST to FLOAT函数,但它不能进行除法运算,也不能将括号转换为负值(见屏幕截图)。
基本问题是:如何将“valueFormatted”字段(会计货币格式)中包含括号的文本值解析为常用数字格式,或者,如何将“value”字段中的除法公式转换为实际计算。

biswetbf

biswetbf1#

使用CASE表达式检查valueFormatted是否为括号内的数值,以及它是否为-1乘以从第二个字符开始的子字符串(在此隐式类型转换过程中,SQLite将丢弃右括号):

SELECT *,
       CASE
         WHEN valueFormatted LIKE '(%)' THEN (-1) * SUBSTR(valueFormatted, 2)
         ELSE valueFormatted
       END AS value
FROM kmmSQLite;

或者,将'('替换为“-”“并加上0,以将结果转换为数字:

SELECT *,
       REPLACE(valueFormatted, '(', '-') + 0 AS value
FROM kmmSQLite;

相关问题