Sql 如何将数字转换为单词-ORACLE
我编写了一个非常简单的查询,结果为500,我需要如下转换此值:-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标记标识: 输出: +-------------+---------------
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/=