2

Q. 在 Words 中显示数值,输出应该是这样的

SAL        In_Words
--------- -----------------------------------------------------
800       eight hundred
1600      one thousand six hundred
1250      one thousand two hundred fifty

而且,我仍然没有弄清楚,这个查询是如何解决上述输出的。

select sal, to_char(to_date(sal,'j'),'Jsp') in_words from emp

to_date在这里做什么?有人对此查询有任何想法吗?

4

4 回答 4

2

那么查询是如何工作的呢?这就是为什么:

select to_char(to_date(:number,'j'),'jsp') from dual;

如果你查看查询 to_date(:number,'j') 的最里面部分,'j' 或 J 是儒略日期(公元前 4713 年 1 月 1 日),基本上这个日期被用于天文研究。

所以 to_date(:number,'j') 它取数字代表的数字,假装它是儒略日期,转换成日期。

如果将 3 传递给数字,那么它将日期转换为 4713 年 1 月 3 日 BC,这意味着 3 被添加到儒略日期。

select to_char(to_date(3,'j'),'jsp') from dual;

现在 to_char(to_date(3,'j'),'jsp'), jsp = Now; 取那个 date(to_date(3,'j')) 并拼出它所代表的儒略数,输出是:

TO_CH
-----
three

使用儒略日期有一个限制,它的范围从 1 到 5373484。这就是为什么如果你把值放在 5373484 之后,它会抛出一个错误,如下所示:

ORA-01854: julian date must be between 1 and 5373484

大家好,这个话题很有趣。我记得当我在 2005 年学习 Oracle 时,一位讲师要求我编写一个 PL/SQL 代码来将数字转换为文字,这是整整两页的代码。

这里有一些参考资料可以帮助我们理解儒略日,这就是我们在这个操作中使用字母“j”或“J”的原因。

首先有一个网站有关于“如何使用 Oracle SQL 查询将数字转换为单词”的示例和说明:

http://viralpatel.net/blogs/convert-number-into-words-oracle-sql-query/

其次,如果您想了解有关“朱利安日”的更多信息,请访问:

http://en.wikipedia.org/wiki/Julian_day

第三,如果您想了解更多关于谁在 1583 年提出儒略日数的信息,那是“约瑟夫·斯卡利格”:

http://en.wikipedia.org/wiki/Joseph_Justus_Scaliger

我继续重复这些网站中的另一位作者所做的事情是没有意义的,这就是为什么我刚刚发布了您可以访问它们的链接并阅读您需要了解的查询如何工作:

SELECT TO_CHAR (TO_DATE (2447834, 'j'), 'jsp') FROM DUAL;

//输出:244.7834万

于 2015-03-13T14:16:33.027 回答
0

要将十进制数转换为单词,您可以按照以下代码

SELECT TO_CHAR(to_date(TRUNC(num),'J'),'Jsp')
  ||' and '
  || TO_CHAR(to_date(to_number(SUBSTR(num-TRUNC(num),instr(num-TRUNC(num),'.')+1)),'J'),'Jsp') Indicator
FROM
  (SELECT &enter_numbr num FROM dual
  );

希望这会有所帮助!!!

于 2014-04-01T11:25:53.953 回答
0

我从未听说过具有内置功能的 DBMS 可以按照您的要求进行操作。您将需要一个数字名称表,使用模算术将每个数字连接一次,并使用字符串连接来生成一个 In_Words 列。加上一些逻辑来消除前导零。需要时间来写。

于 2013-04-21T05:08:03.663 回答
0

J 代表儒略日 - 自公元前 4712 年 1 月 1 日以来的天数。表中的数字转换为儒略日期。JSP 拼出日期:

SELECT to_char(SYSDATE,'JSP') AS number_of_days_sinse_4712_BC
  FROM dual
/
于 2013-04-22T13:07:06.517 回答