我想学习格式化数字数据的最佳实践,这些数据来自HSQLDB select
查询,用于人类可读的输出。 目标是能够使用类似于C printf()
的内容格式化数字。意思是,我希望能够指定
为了论证,我举一个例子:我在HSQLDB中编写一个存储过程来创建一个人类可读的审计跟踪。我想要的一个示例行是:
Time Event
---- -----
2014-02-10 14:54:10.855 Filled 50,000 at 13.3144 (66,5720.00 MXN), leaves 0.
数值来自DB列(整数和十进制)。但是目前我正在使用CAST
将这些转换为VARCHAR,然后我使用||将它们连接起来。实际输出是:
Filled 50000.0E0 at 13.3144E0 (665720.0E0 MXN), leaves 0.0E0
我还要担心截断整个邮件 - 我需要确保转换后的数字的长度不超过 Event 列的允许大小。
所以我想听听人们在做这样的事情时会采取什么方法。我想到的一件事是,这可以写在一个java存储过程中,允许使用printf()
。这是最好的方法,还是有一种很好的方式在SQL中做到这一点?另外,为了论证,我们假设这需要成为数据库的一部分(即从外部查询表,然后格式化数据不是一种选择)。
答案 0 :(得分:2)
这可以用Java或SQL FUNCTION编写。
在SQL函数中,如果将数字转换为DECIMAL(20,2),则将获得固定数量的2个小数点。转换为BIGINT将不会给出小数点。当您将结果转换为VARCHAR(40)时,这解决了小数点问题。您需要编写一个函数来在字符串中插入逗号。 SUBSTRING函数可用于获取字符串的部分和||运算符用逗号连接它们。