Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana cara mengubah angka menjadi kata - ORACLE

Gunakan kekuatan Luke;)

SqlFiddleDemo

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

Petunjuknya adalah Date dalam format ejaan.

EDIT:

Menambahkan dukungan untuk 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

EDIT 2:##

Menambahkan dukungan terbatas untuk 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

EDIT 3

untuk 10.3 output adalah SEPULUH POINT TIGA tetapi harus SEPULUH TIGA TIGA PULUH untuk 10.3 dan SEPULUH TIGA TIGA untuk 10,03. Bagaimana saya bisa mencapai ini?

Bergantung pada berapa banyak digit yang Anda inginkan untuk identitas, itu bisa RPADed dengan 0:

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<>demo biola

Keluaran:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memutar Tabel dalam SQL (yaitu Tabulasi silang / tabulasi silang)

  2. Cara menjalankan Opatch dalam bentuk non-interaktif

  3. Cara menjalankan skrip SQL Plus di PowerShell

  4. Oracle sql:pesan berdasarkan dan klausa berbeda

  5. Apa itu catatan PLSQL di Oracle