如何在单词中显示数字值

时间:2013-04-20 17:51:45

标签: sql oracle type-conversion to-date to-char

Q值。在单词中显示数字值,输出应该如下所示

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 个答案:

答案 0 :(得分: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日,这意味着将3添加到Julian日期。

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

现在to_char(to_date(3,'j'),'jsp'),jsp = Now;取该日期(to_date(3,'j'))并拼写它代表的朱利安数字,输出为:

TO_CH
-----
three

使用Julian日期时有一个限制,范围从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年提出朱利安日数的问题,那就是“Joseph Scaliger”:

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

对我来说,继续回复这些网站中的其他作者所做的并不是很有意义,这就是为什么我只是发布了你可以访问它们的链接,并阅读了你需要了解如何查询这样的工作:

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

//输出:两百四十四万七千八百三十四

答案 1 :(得分:0)

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

答案 2 :(得分:0)

J代表朱利安日 - 自公元前4712年1月1日以来的天数。表格中的数字转换为Julian日期。 JSP说明了日期:

SELECT to_char(SYSDATE,'JSP') AS number_of_days_sinse_4712_BC
  FROM dual
/

答案 3 :(得分: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
  );

希望这会有所帮助!!!