当前位置: 首页 > 面试题库 >

如何将数字转换为单词-ORACLE

巫马承德
2023-03-14
问题内容

我写了一个非常简单的查询,结果为500,我需要像下面这样转换该值:-

old value =     500

new value =  FIVE HUNDERED/=

问题答案:

用力卢克;)

SqlFiddleDemo

SELECT UPPER(TO_CHAR(TO_DATE(500,'J'),'Jsp')) || '/=' AS new_value
FROM dual;

提示采用Date拼写形式。

编辑:

添加对以下内容的支持negative numbers

SqlFiddleDemo

WITH cte AS
(
  SELECT 10 AS num      FROM dual
  UNION ALL SELECT -500 FROM dual
  UNION ALL SELECT 0    FROM dual
)
SELECT num AS old_value,
       decode( sign( num ), -1, 'NEGATIVE ', 0, 'ZERO', NULL ) ||
       decode( sign( abs(num) ), +1, to_char( to_date( abs(num),'J'),'JSP') ) || '/=' AS new_value
FROM cte

编辑2:

添加对float的有限支持:

SqlFiddleDemo3

WITH cte AS
(
  SELECT 10 AS num       FROM dual
  UNION ALL SELECT -500  FROM dual
  UNION ALL SELECT 0     FROM dual
  UNION ALL SELECT 10.3  FROM dual
  UNION ALL SELECT -10.7 FROM dual
)
SELECT 
  num AS old_value,
  decode( sign( num ), -1, 'NEGATIVE ', 0, 'ZERO', NULL )
  || decode( sign( abs(num) ), +1, to_char( to_date( abs(TRUNC(num)),'J'),'JSP') )
  ||
  CASE
     WHEN INSTR (num, '.') > 0
     THEN  ' POINT ' || TO_CHAR (TO_DATE (TO_NUMBER (SUBSTR(num, INSTR (num, '.') + 1)),'J'),'JSP')
     ELSE NULL
  END AS new_value
FROM cte

编辑3:

10.3的输出为十点三,但10.3的输出为十点三,10.03的输出为十点三。我怎样才能做到这一点?

根据您要标识的位数,可以为RPADed0:

WITH cte AS
(
  SELECT 10.03 AS num FROM dual
  UNION ALL
  SELECT 10.30 FROM dual
  UNION ALL
  SELECT 10.33 FROM dual
)
SELECT 
  num AS old_value,
  decode( sign( num ), -1, 'NEGATIVE ', 0, 'ZERO', NULL )
  || decode( sign( abs(num) ), +1, to_char( to_date( abs(TRUNC(num)),'J'),'JSP') )
  ||
  CASE
     WHEN INSTR (num, '.') > 0
     THEN  ' POINT ' || TO_CHAR (TO_DATE (TO_NUMBER (RPAD(SUBSTR(num, INSTR (num, '.') + 1)
                                                     ,2,'0')
                                                     ),'J'),'JSP')
     ELSE NULL
  END AS new_value
FROM cte;

db <>fiddle演示

输出:

+-------------+------------------------+
|  OLD_VALUE  |       NEW_VALUE        |
+-------------+------------------------+
|      10.03  | TEN POINT THREE        |
|       10.3  | TEN POINT THIRTY       |
|      10.33  | TEN POINT THIRTY-THREE |
+-------------+------------------------+


 类似资料:
  • 问题内容: 我正在尝试将以单词形式编写的数值转换为整数。例如,“ iPhone有233.7万个应用程序”将变成“ iPhone为230783个应用程序” 在开始编码之前,我想知道此转换是否存在任何功能/代码。 问题答案: 有很多页面讨论从数字到单词的转换。反方向的数量不多。 以获取一种不错的算法: 好吧,总的来说,您正在做两件事:查找标记(转换为数字的单词)和应用语法。简而言之,您正在为一种非常有

  • 问题内容: 我需要将1到99之间的数字转换为单词。这是我到目前为止所得到的: 现在,到目前为止,我最大的问题是if,elif和else语句似乎不起作用。仅第一个if语句运行。 第二个问题是创建20-99之间数字的字符串版本。 PS:是的,我知道num2word库,但不允许使用它。 问题答案: 您的第一条陈述逻辑不正确。除非等于或小于1,否则该语句 始终为 True;否则,该语句 始终为 True。

  • 将给定的字符串转换为单词数组。 使用 String.split() 提供的模式(pattern)(默认为非 alpha 作为正则表达式)来转换为一个字符串数组。 使用 Array.filter() 去除任何空字符。 省略第二个参数来使用默认的正则表达式。 const words = (str, pattern = /[^a-zA-Z-]+/) => str.split(pattern).filte

  • 问题内容: 我正在编写将给定数量转换为单词的代码,这是我在谷歌搜索后得到的。但是我认为要完成一个简单的任务需要一些冗长的代码。两个正则表达式和两个循环,我想要更简单的方法。 我正在尝试使其尽可能短。并发布我的想法 有什么建议? 同样,上面的代码转换为英语编号系统,例如Million / Billion,我不希望使用南亚编号系统。就像在Lakhs和Crores 问题答案: 更新 :看起来这比我想象的

  • 问题内容: 当我在mysql中执行查询时,我尝试按以下方式打印输出。 Salary列的值为45000,第三列中的第二列中的Value通过Query转换为单词。 我找到了一些文章,在Oracle中可以使用以下查询获得如上所述的结果: 输出: 在MySQL中,我尝试了LPAD,RPAD,但那些只是将字符串添加到结果中,而不是将单词转换为字符串。 我找到了一些教程,但所有这些教程都对“ TO_CHAR(

  • 我知道在python中有一种方法可以使用将单词或字符串转换为列表,但是有没有一种方法可以将其转换为列表,我有: 我试图使用将其更改回字符串,但它保留了语法,仅更改了数据类型。 我想知道是否有办法将列表,例如转换为:。