[英]Sqlite convert text to decimal?
我有一个带有列的Sqlitedb: amount text not null
在列金额中,我以以下格式存储美元值:$ 1.01,$ 40.58等。
我正在尝试总结使用的美元价值
SELECT SUM(amount) FROM record WHERE date LIKE '"+date+"'"
但是,它不起作用,大概是因为您无法添加文本。 我知道这不是理想的存储,但是我将如何解析数量以便将它们加起来呢?
好吧,正如您所说的,这并不是理想的存储值的方式(从一开始就应该以decimal
/ real
格式),但是您可以执行以下操作:
SELECT SUM(SUBSTR(amount, 2)) FROM record WHERE date LIKE '"+date+"'"
SUBSTR
方法是一个文本函数,它将获取文本的一部分(在这种情况下,从起始索引开始)。 这里的问题是$
符号,它混淆了动态类型转换,使您认为您试图将字符串加在一起。
现在,这应该可以工作,因为SQLLite允许动态类型化 (简而言之,意味着该值用于比较,而不是容器)。
最好将金额存储为未缩放的整数,并在需要显示时将其格式化。 您可以获得更紧凑的存储空间,并且添加起来更加轻松快捷。 使用整数避免了在浮点表示法中舍入错误的风险。
通过无标度 ,我的意思是$ 1.23将被存储为整数123。(在Java代码中使用long
,在SQL中使用INTEGER
。)
您可以通过查询语言环境中的相关信息来格式化显示金额:
// implement this any way you like!
long amount = getAmountFromDb();
// use default locale if you want
Locale locale = getLocaleFromSomewhere();
Currency currency = Currency.getInstance(locale);
NumberFormat format = NumberFormat.getCurrencyInstance(locale);
int scale = currency.getDefaultFractionDigits();
BigDecimal scaledAmount = new BigDecimal(unscaledBalance).movePointLeft(scale);
String textAmount = format.format(scaledAmount);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.