PL / SQL将数字转换为文本[重复]

Posted

技术标签:

【中文标题】PL / SQL将数字转换为文本[重复]【英文标题】:PL/SQL to translate a number into text [duplicate] 【发布时间】:2013-02-13 12:51:51 【问题描述】:

我使用 Jaspersoft iReport 工具从 Oracle DB 中的表设计报告。 我得到一个数字值,我想把它转换成文本。

例如,如果我得到的值是 1652 我需要一个 Pl/SQL 函数将其转换为 一千五百零二

有没有可用的功能?

【问题讨论】:

忽略重复的建议是关于转换为意大利语的事实。它包括拼写数字的解决方案是单词 【参考方案1】:

您可以将数字转换为时间戳并返回以获取整数:

SQL>    select to_char(to_timestamp(lpad( 1652 , 9, '0'), 'FF9' ), 'Ffsp' ) str
  2    from dual;

STR
---------------------------------------------------------------------------
One Thousand Six Hundred Fifty-Two

SQL> select to_char(to_timestamp(lpad( 1502 , 9, '0'), 'FF9' ), 'Ffsp' ) str from dual;

STR
---------------------------------------------------------------------------
One Thousand Five Hundred Two

这将在一定程度上起作用(它将返回的字符串的大小是有限的)。否则你必须编写自己的函数来做到这一点。

【讨论】:

好招!它以ORA-01877: string is too long for internal buffer 开始失败,数字非常大,我见过的最大有效数字是 999,999,099。 @JeffreyKemp 是的,使用此方法输出的限制是 75 个字符。【参考方案2】:

你可以使用这个技巧:

DECLARE 
   ws_number NUMBER := 30; 
   ws_text   VARCHAR2(60); 
BEGIN 
   ws_text := to_char(to_date(ws_number,'j'), 'jsp'); 
 END;

j 将数字转换为儒略日期,jsp 返回儒略日期的值。在this Ask Tom post 上有更全面的描述

【讨论】:

Ty Ben,我不能在代码上使用 enter,不知道为什么。 在sql*plus中执行匿名pl/sql块后需要一个/ 这适用于数字 1 到 5,373,484。

以上是关于PL / SQL将数字转换为文本[重复]的主要内容,如果未能解决你的问题,请参考以下文章

转换为数字时的 PL/SQL 数字或值错误

pl/sql 从数字到字符串的转换

如何将具有十进制值的数字转换为PL / SQL中的浮点数?

如何将数字转换为文本[重复]

将 Pandas 系列日期时间“月份”数字转换为月份文本 [重复]

使用 SQL 将数字转换为相应的文本