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将数字转换为文本[重复]的主要内容,如果未能解决你的问题,请参考以下文章