3

我在我的项目中使用了两个不同的数据库,Oracle 和 Apache Derby,并且正在尝试尽可能多地使用这两个数据库都支持的 ANSI SQL 语法。

我有一个带有列的表 amount_paid NUMERIC(26,2)

我使用 Oracle db 的旧代码需要以这种格式检索值

SELECT LTRIM(TO_CHAR(amount_paid,'9,999,999,999,999.99'))

如何使用 ANSI sql 语法将数值转换为格式为 '9,999,999,999,999.99' 的字符串?

4

2 回答 2

5

我认为这是错误的做法。格式掩码是用于显示目的,所以它确实应该是表示层的关注点。您的所有数据访问层应该做的只是执行:

select amount_paid 
from your_table
where ....

这种语法显然适用于您的应用程序附加到的任何数据库。

然后把格式化代码放在前端,它所属的地方。

于 2010-06-09T18:05:45.820 回答
1

我的知识不是百科全书,但据我所知,没有 ANSI 函数可以做你想做的事(尽管我很高兴发现我错了:-)。CONVERT 在字符集之间进行转换,但据我所知,它不会执行您想要的格式化工作。CAST 在数据类型之间转换值,但同样不进行格式化。

如果 Derby 不支持 Oracle 样式的 TO_CHAR 函数,您可能必须滚动自己的函数,我们将其命名为 MY_TO_CHAR。在 Oracle 中,实现可能是

FUNCTION MY_TO_CHAR(nValue IN NUMBER,
                    strOracle_format IN VARCHAR2,
                    strDerby_format  IN VARCHAR2)
  RETURN VARCHAR2
IS BEGIN
  RETURN TO_CHAR(nValue, strOracle_format);
END MY_TO_CHAR;

在 Derby 中,您希望以类似的方式定义此函数,采用适当的值和格式,并使用 Derby 格式化字符串调用 Derby 的 TO_CHAR 等效项。

编辑:我同意@APC - 如果您不需要后端做基本上是前端的工作,那么很多这些问题都会消失。

分享和享受。

于 2010-06-09T18:09:27.337 回答