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

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

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

有没有可用的功能?

【问题讨论】:

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

标签: oracle function plsql jasper-reports


【解决方案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。
猜你喜欢
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
  • 2021-05-04
  • 2013-11-08
  • 1970-01-01
  • 1970-01-01
  • 2014-03-31
  • 2015-09-16
相关资源
最近更新 更多