【问题标题】:Oracle PL/SQL: Convert number to words without using to_date [duplicate]Oracle PL/SQL:将数字转换为单词而不使用 to_date [重复]
【发布时间】:2018-03-25 23:23:32
【问题描述】:

除了使用to_date 函数在 Oracle 中使用 PL/SQL 将数字转换为单词之外,是否有一个简单的替代方法,例如 0 -> 零、1->一、2->二等

我进行了很多研究,发现了以下流行的说法,但我要求在不使用 to_date() 的情况下做同样的事情 例如

SELECT TO_CHAR(TO_DATE(500,'J'),'Jsp')) FROM dual;

【问题讨论】:

  • to_date 是将日期文字转换为 DATE 类型。这与“单词”有什么关系?不清楚。
  • @OldProgrammer 看这里:stackoverflow.com/questions/16123413/…
  • 是否有比使用唯一内置解决方案“更简单”的解决方案 = 否。to_char() 参数'Jsp' 需要朱利安日期,一旦你有了朱利安日期然后它可以为您“拼写”它们。要获取儒略日期,您需要 to_date() 函数。
  • 可能重复的可接受答案使用TO_DATE 执行转换。 OP 特别声明他们不想使用TO_DATE,所以我的评估是这不是一个重复。
  • 看来人家有功课了;几天前我们讨论了完全相同的问题,所以 - 是的,我说这是重复的。

标签: sql oracle plsql to-date


【解决方案1】:

为什么要求不使用 TO_DATE ?这似乎是一个奇怪的要求。这就像说“我想查询数据但不使用 SELECT”。

事实上,如果问题在于您希望能够超过使用 TO_DATE 方法所允许的值,那么您可以轻松地扩展它

SQL> create or replace
  2  function spell_number( p_number in number )
  3  return varchar2
  4  as
  5  type myArray is table of varchar2(255);
  6  l_str myArray := myArray( '',
  7  ' thousand ', ' million ',
  8  ' billion ', ' trillion ',
  9  ' quadrillion ', ' quintillion ',
 10   ' sextillion ', ' septillion ',
 11   ' octillion ', ' nonillion ',
 12   ' decillion ', ' undecillion ',
 13   ' duodecillion ' );
 14
 15   l_num varchar2(50) default trunc( p_number );
 16   l_return varchar2(4000);
 17   begin
 18   for i in 1 .. l_str.count
 19   loop
 20   exit when l_num is null;
 21
 22   if ( substr(l_num, length(l_num)-2, 3) <> 0 )
 23   then
 24   l_return := to_char(
 25   to_date(
 26   substr(l_num, length(l_num)-2, 3),
 27   'J' ),
 28   'Jsp' ) || l_str(i) || l_return;
 29   end if;
 30   l_num := substr( l_num, 1, length(l_num)-3 );
 31   end loop;
 32
 33   return l_return;
 34   end;
 35  /

Function created.

SQL>
SQL> select spell_number( 12345678901234567890123456789012345678 ) from dual;
Twelve undecillion Three Hundred Forty-Five decillion Six Hundred Seventy-Eight nonillion Nine Hundr
ed One octillion Two Hundred Thirty-Four septillion Five Hundred Sixty-Seven sextillion Eight Hundre
d Ninety quintillion One Hundred Twenty-Three quadrillion Four Hundred Fifty-Six trillion Seven Hund
red Eighty-Nine billion Twelve million Three Hundred Forty-Five thousand Six Hundred Seventy-Eight

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 2019-09-11
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 2011-02-13
    相关资源
    最近更新 更多