如何格式化HSQLDB中的数字 - printf()等效

时间:2014-02-11 08:38:27

标签: hsqldb

我想学习格式化数字数据的最佳实践,这些数据来自HSQLDB select查询,用于人类可读的输出。 目标是能够使用类似于C printf() 的内容格式化数字。意思是,我希望能够指定

  • 逗号分隔符每3个S.F。
  • 小数点后的位数
  • 0小数点前填充

为了论证,我举一个例子:我在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中做到这一点?另外,为了论证,我们假设这需要成为数据库的一部分(即从外部查询表,然后格式化数据不是一种选择)。

1 个答案:

答案 0 :(得分:2)

这可以用Java或SQL FUNCTION编写。

在SQL函数中,如果将数字转换为DECIMAL(20,2),则将获得固定数量的2个小数点。转换为BIGINT将不会给出小数点。当您将结果转换为VARCHAR(40)时,这解决了小数点问题。您需要编写一个函数来在字符串中插入逗号。 SUBSTRING函数可用于获取字符串的部分和||运算符用逗号连接它们。