oracle 如何用文字显示数值

i7uq4tfw  于 2022-11-03  发布在  Oracle
关注(0)|答案(4)|浏览(209)

Q.以Word格式显示数值,输出应如下所示

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在这里做什么?有人知道这个查询吗?

tjrkku2a

tjrkku2a1#

那么查询是如何工作的呢?原因如下:

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

如果你查看查询的最里面的部分to_date(:number,'j'),'j'或J是儒略日期(公元前4713年1月1日),基本上这个日期被用于天文学研究。
所以to_date(:number,'j')它取number所代表的数字并假装它是一个儒略历日期,转换成一个日期。
如果将3传递给number,那么它会将日期转换为公元前4713年1月3日,这意味着儒略日期增加了3。

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

现在到字符(到日期(3,'j'),'jsp'),jsp =现在;取日期(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年提出了儒略日数,它是由“约瑟夫Scaliger”:
http://en.wikipedia.org/wiki/Joseph_Justus_Scaliger
这是没有意义的,我继续repeting什么另一个作者在这些网站上做了,这就是为什么我只是张贴链接,你可以访问他们,并阅读你需要了解如何查询这样的工作:

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

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

5lhxktic

5lhxktic2#

我从来没有听说过一个DBMS有一个内置的函数来完成你的要求。你需要一个数字名称表,用模算术和字符串连接来产生一个In_Words列。加上一些逻辑来消除前导零。这需要花时间来写。

ryhaxcpt

ryhaxcpt3#

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

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

vom3gejh4#

要将十进制数字转换为单词,可以执行以下代码

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
  );

希望这对你有帮助!

相关问题