Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将数字转换为单词-ORACLE_Sql_Oracle - Fatal编程技术网

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

Sql 如何将数字转换为单词-ORACLE,sql,oracle,Sql,Oracle,我编写了一个非常简单的查询,结果为500,我需要如下转换此值:- old value = 500 new value = FIVE HUNDERED/= 使用原力 线索是拼写格式的日期 编辑: 添加对负数的支持: 编辑2: 添加对float的有限支持: 编辑3: 10.3的输出为10.3,但10.3的输出应为10.30,10.03的输出应为10.3。我怎样才能做到这一点 根据您想要标识的位数,可以使用0标记标识: 输出: +-------------+---------------

我编写了一个非常简单的查询,结果为500,我需要如下转换此值:-

old value =     500

new value =  FIVE HUNDERED/=
使用原力

线索是拼写格式的日期

编辑:

添加对负数的支持:

编辑2: 添加对float的有限支持:

编辑3:

10.3的输出为10.3,但10.3的输出应为10.30,10.03的输出应为10.3。我怎样才能做到这一点

根据您想要标识的位数,可以使用0标记标识:

输出:

+-------------+------------------------+
|  OLD_VALUE  |       NEW_VALUE        |
+-------------+------------------------+
|      10.03  | TEN POINT THREE        |
|       10.3  | TEN POINT THIRTY       |
|      10.33  | TEN POINT THIRTY-THREE |
+-------------+------------------------+
您可以使用J->JSP技巧:


要了解它是如何工作的,请看。

如果我们做了你的家庭作业,你会学到任何东西吗?我得到一个错误:ORA-01854:julian date必须介于1和5373484 01854之间。00000-儒略日期必须介于1和5373484之间*原因:输入的儒略日期无效*操作:输入一个介于1和5373484之间的有效朱利安日期。我已经根据我的表和列转换了您的查询,如下所示,我得到一个以上错误:选择acy_avl_bal、UPPERTO_CHARTO_DATEacy_avl_bal、'J'、'JSP'| |'/='作为sttm_cust的新值_account@user3004110这是一个限制,,数字必须是整数并且在你提到的范围内。我不明白为什么你用数字列来表示日期?这可能是错误的原因吗?当我删除to_date函数时,它会导致另一个错误。感谢您的时间,但我在银行,这里我们有数十亿的金额要显示,每当我写25000000时,它会给我另一个错误:ORA-01830:日期格式图片在转换整个输入字符串之前结束---是否有任何直接的查询??,谢谢。
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
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
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;
+-------------+------------------------+
|  OLD_VALUE  |       NEW_VALUE        |
+-------------+------------------------+
|      10.03  | TEN POINT THREE        |
|       10.3  | TEN POINT THIRTY       |
|      10.33  | TEN POINT THIRTY-THREE |
+-------------+------------------------+
SQL> SELECT TO_CHAR(TO_DATE(500,'J'),'JSP')||'/=' num_2_words FROM dual;

NUM_2_WORDS
--------------
FIVE HUNDRED/=