如何在 HSQLDB 中格式化数字 - printf() 等效项
Posted
技术标签:
【中文标题】如何在 HSQLDB 中格式化数字 - printf() 等效项【英文标题】:How to format numbers in HSQLDB - printf() equivalent 【发布时间】:2014-02-11 08:38:27 【问题描述】:我想了解格式化从 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 中有一种很好的方法?此外,为了论证,我们假设这需要成为数据库的一部分(即,从外部查询表然后格式化数据不是一种选择)。
【问题讨论】:
【参考方案1】:这可以用 Java 或 SQL FUNCTION 编写。
在 SQL 函数中,如果将数字转换为 DECIMAL(20,2),您将得到固定的 2 位小数点。转换为 BIGINT 不会给出小数点。这解决了将结果转换为 VARCHAR(40) 时的小数点问题。您需要编写一个函数来在字符串中插入逗号。 SUBSTRING 函数可用于获取字符串的各个部分和 ||运算符用逗号连接它们。
【讨论】:
以上是关于如何在 HSQLDB 中格式化数字 - printf() 等效项的主要内容,如果未能解决你的问题,请参考以下文章
HSQLDB (HyperSQL) - 如何以毫秒精度将 UNIX 时间戳作为数字获取