Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Chuyển đổi chữ số / số bằng từ sang tiền tệ INR (Rupee Ấn Độ) trong Oracle PL / SQL

Chuyển đổi chữ số / số bằng từ sang tiền tệ INR (Rupee Ấn Độ) trong Oracle PL / SQL

Dưới đây là hai chức năng để chuyển đổi số / chữ số sang các từ Rupee Ấn Độ. Chức năng chính là chức năng Rupees.

Cách sử dụng:

Select Rupees(99999.99) from dual;

hoặc

Set serveroutput on;
Declare
  vstring varchar2(200);
Begin
   vstring := Rupees(9546);
  dbms_output.put_line(vstring);
end;

Nó có giá trị tối đa 99.999.00, bạn có thể sửa đổi thêm.

CREATE OR REPLACE FUNCTION number_to_word (pnum in number) RETURN varchar2 IS

rvalue varchar2(50);

BEGIN

  if pnum = 1 then     

      rvalue := 'One';

  elsif pnum = 2 then

      rvalue := 'Two';

  elsif pnum = 3 then

      rvalue := 'Three';

  elsif pnum = 4 then

      rvalue := 'Four';

  elsif pnum = 5 then

      rvalue := 'Five';

  elsif pnum = 6 then

      rvalue := 'Six';

  elsif pnum = 7 then

      rvalue := 'Seven';

  elsif pnum = 8 then

      rvalue := 'Eight';

  elsif pnum = 9 then 

      rvalue := 'Nine';

  elsif pnum = 10 then

      rvalue := 'Ten';

  elsif pnum = 11 then

      rvalue := 'Eleven';

  elsif pnum = 12 then

      Rvalue := 'Twelve';

  elsif pnum = 13 then

      rvalue := 'Thirteen';

  elsif pnum = 14 then

      rvalue := 'Fourteen';

  elsif pnum = 15 then

      rvalue := 'Fifteen';

  elsif pnum = 16 then

      rvalue := 'Sixteen';

  elsif pnum = 17 then

      rvalue := 'Seventeen';

  elsif pnum = 18 then

      rvalue := 'Eighteen';

  elsif pnum = 19 then

      rvalue := 'Nineteen';

  elsif pnum = 20 then

      rvalue := 'Twenty';

  elsif pnum = 30 then

      rvalue := 'Thirty';

  elsif pnum = 40 then

      rvalue := 'Forty';

  elsif pnum = 50 then

      rvalue := 'Fifty';

  elsif pnum = 60 then

      rvalue := 'Sixty';

  elsif pnum = 70 then

      rvalue := 'Seventy';

  elsif pnum = 80 then

      rvalue := 'Eighty';

  elsif pnum = 90 then

      rvalue := 'Ninety';

  else

      rvalue := '';

  end if;

  return(rvalue);

END;

/
CREATE OR REPLACE FUNCTION Rupees (pn IN NUMBER)

   RETURN VARCHAR2

IS

   vt     VARCHAR2 (200);

   ntv    VARCHAR2 (10);

   vlen   NUMBER (2);

BEGIN

   vt := 'Rupees ';

   ntv := RTRIM (LTRIM (TO_CHAR (pn)));

   vlen := LENGTH (ntv);

   IF vlen > 0 AND vlen < 2

   THEN                                                        -- single digit

      vt := vt || number_to_word (pn);

   ELSIF vlen > 1 AND vlen < 3

   THEN                                                           -- two digit

      IF pn < 21

      THEN

         vt := vt || number_to_word (pn);

      ELSE

         vt :=

            vt || number_to_word (TO_NUMBER (SUBSTR (ntv, 1, 1) || '0'));

         vt := vt || ' ';

         vt := vt || number_to_word (TO_NUMBER (SUBSTR (ntv, 2, 1)));

      END IF;

   -- two digit handled.

   ELSIF vlen > 2 AND vlen < 4

   THEN                                                         -- three digit

      vt := vt || number_to_word (TO_NUMBER (SUBSTR (ntv, 1, 1)));

      vt := vt || ' Hundred ';

      IF TO_NUMBER (SUBSTR (ntv, 2, 2)) > 0

      THEN

         vt := vt || 'and ';

      END IF;

      IF TO_NUMBER (SUBSTR (ntv, 2, 2)) > 20

      THEN

         vt :=

            vt || number_to_word (TO_NUMBER (SUBSTR (ntv, 2, 1) || '0'));

         IF TO_NUMBER (SUBSTR (ntv, 2, 1)) > 0

         THEN

            vt := vt || ' ';

         END IF;

         vt := vt || number_to_word (TO_NUMBER (SUBSTR (ntv, 3, 1)));

      ELSE

         vt := vt || number_to_word (TO_NUMBER (SUBSTR (ntv, 2, 2)));

         IF TO_NUMBER (SUBSTR (ntv, 2, 1)) > 0

         THEN

            vt := vt || ' ';

         END IF;

      END IF;

   -- three digit handled

   ELSIF vlen > 3 AND vlen < 5

   THEN                                                            -- thousand

      vt := vt || number_to_word (TO_NUMBER (SUBSTR (ntv, 1, 1)));

      vt := vt || ' Thousand ';

      IF TO_NUMBER (SUBSTR (ntv, 2, 3)) > 0

      THEN

         IF TO_NUMBER (SUBSTR (ntv, 2, 1)) > 0

         THEN

            vt := vt || number_to_word (TO_NUMBER (SUBSTR (ntv, 2, 1)));

            vt := vt || ' Hundred ';

         END IF;

         IF TO_NUMBER (SUBSTR (ntv, 3, 2)) > 0

         THEN

            vt := vt || 'and ';

         END IF;

         IF TO_NUMBER (SUBSTR (ntv, 3, 2)) > 20

         THEN

            -- 9999

            vt :=

               vt

               || number_to_word (TO_NUMBER (SUBSTR (ntv, 3, 1) || '0'));

            IF TO_NUMBER (SUBSTR (ntv, 3, 1)) > 0

            THEN

               vt := vt || ' ';

            END IF;

            vt := vt || number_to_word (TO_NUMBER (SUBSTR (ntv, 4, 1)));

         ELSE

            vt := vt || number_to_word (TO_NUMBER (SUBSTR (ntv, 3, 2)));

            IF TO_NUMBER (SUBSTR (ntv, 3, 1)) > 0

            THEN

               vt := vt || ' ';

            END IF;

         END IF;

      END IF;

      -- thousand handled now 99 thousand.

      ELSIF vlen > 4 AND vlen < 6

   THEN                                                            

   -- thousand

   if to_number(substr(ntv,1,2)) <= 20 then

      vt := vt || number_to_word (TO_NUMBER (SUBSTR (ntv, 1, 2)));

      vt := vt || ' Thousand ';

      else

      vt := vt || number_to_word(to_number(substr(ntv,1,1)||'0'));

      vt := vt || ' '|| number_to_word(to_number(substr(ntv,2,1)));

      vt := vt || ' Thousand ';

   end if;

      IF TO_NUMBER (SUBSTR (ntv, 3, 3)) > 0

      THEN

         IF TO_NUMBER (SUBSTR (ntv, 3, 1)) > 0

         THEN

            vt := vt || number_to_word (TO_NUMBER (SUBSTR (ntv, 3, 1)));

            vt := vt || ' Hundred ';

         END IF;

         IF TO_NUMBER (SUBSTR (ntv, 4, 2)) > 0

         THEN

            vt := vt || 'and ';

         END IF;

         IF TO_NUMBER (SUBSTR (ntv, 4, 2)) > 20

         THEN

            -- 99999

            vt :=

               vt

               || number_to_word (TO_NUMBER (SUBSTR (ntv, 4, 1) || '0'));

            IF TO_NUMBER (SUBSTR (ntv, 4, 1)) > 0

            THEN

               vt := vt || ' ';

            END IF;

            vt := vt || number_to_word (TO_NUMBER (SUBSTR (ntv, 5, 1)));

         ELSE

            vt := vt || number_to_word (TO_NUMBER (SUBSTR (ntv, 4, 2)));

            IF TO_NUMBER (SUBSTR (ntv, 4, 1)) > 0

            THEN

               vt := vt || ' ';

            END IF;

         END IF;

      END IF;

   END IF;

   IF LENGTH (vt) > 7

   THEN

      vt := RTRIM (vt) || ' only.';

   ELSE

      vt := '';

   END IF;

   RETURN (vt);

END;

/
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sự khác biệt giữa từ khóa tham gia và từ khóa tham gia bên trong trong sql oracle là gì?

  2. Quản trị cơ bản của Oracle 12c Multitenant

  3. 5 cách cập nhật dữ liệu bằng truy vấn con trong Oracle SQL

  4. Checker Run

  5. Làm cách nào để chỉ trích xuất giá trị ngày tháng từ trường ngày tháng trong Oracle?