sql >> Databáze >  >> RDS >> Oracle

Jak převést číslo na slova - ORACLE

Použijte sílu Luku;)

SqlFiddleDemo

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

Vodítkem je Date ve hláskovaném formátu.

UPRAVIT:

Přidání podpory pro 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

EDITACE 2:##

Přidání omezené podpory pro 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

ÚPRAVA 3:

pro výstup 10.3 je 10 BODŮ TŘI, ale mělo by to být 10 BODŮ TŘICÁT pro 10.3 a DESET BODŮ TŘI pro 10.03. Jak toho mohu dosáhnout?

V závislosti na tom, kolik číslic chcete pro identitu, může být RPADed s 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<>ukázka houslí

Výstup:

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


  1. CAST a IsNumeric

  2. Vložte data do databáze MySQL

  3. Limity SQL NVARCHAR a VARCHAR

  4. Jak zachovat pořadí vkládání na SQL Server