DBAsupport.com Forums - Powered by vBulletin
Results 1 to 5 of 5

Thread: Convert DEC to HEX

  1. #1
    Join Date
    Aug 2000
    Location
    Shanghai
    Posts
    433
    Is there any function in Oracle to convert the DEC to HEX format ?

    Let's say TO_HEX(16) = A ???

    Thanks

  2. #2
    Join Date
    Jun 2001
    Location
    Helsinki. Finland
    Posts
    3,938
    select to_char(10,'XXXXXXXXX') from dual;

    However, 16 = 10, and 10 = A, right :-)

    The other way round:

    select to_number('A','XXXXXXXXX') from dual;

  3. #3
    Join Date
    Aug 2000
    Location
    Shanghai
    Posts
    433
    select to_char(10,'XXXXXXXXX') from dual;

    select to_number('A','XXXXXXXXX') from dual;

    both of them can not work under oracle7.3 . The format
    string is incorrect.

    Any idea ?

  4. #4
    Join Date
    Jun 2001
    Location
    Helsinki. Finland
    Posts
    3,938
    I see, you use Oracle 7.
    Use this one (hand-made, neglect the Finnish language comments), use it like:

    select luku_muunnos(16) from dual;

    function luku_muunnos(desimaali_luku in number)
    return varchar2
    is
    -- Uusi heksadesimaali asetetaan muuttujaan 'w_uusi_desimaali'.
    w_uusi_desimaali number;
    -- Muuttuja w_desimaaliluku on jäljelle jäävä, vielä muuntamaton osuus.
    w_desimaaliluku number;
    -- Paluuarvo.
    w_ret varchar2(1000);
    begin
    -- Mikäli annettu parametri on null tai negatiivinen, palautetaan null.
    if ((desimaali_luku is null) or (desimaali_luku < 0)) then return (null); end if;

    -- Alustetaan paluuarvo ja vielä muuntamaton osuus.
    w_ret := '';
    w_desimaaliluku := desimaali_luku;

    -- Käydään läpi desimaalilukua, kunnes se on muunnettu kokonaan.
    loop
    -- Uusi muunnettava desimaali saadaan ottamalla luvusta 16:n jakojäännös.
    w_uusi_desimaali := w_desimaaliluku mod 16;
    -- Sitten jäljellä oleva osa jaetaan 16:lla alaspäin pyöristäen.
    w_desimaaliluku := (w_desimaaliluku-w_uusi_desimaali)/16;

    -- Tutkitaan, mikä uusi heksadesimaali on ja konkatenoidaan se aiemmilla kierroksilla
    -- saadun esityksen alkuun.
    if w_uusi_desimaali = 10 then
    w_ret := 'A' || w_ret;
    elsif w_uusi_desimaali = 11 then
    w_ret := 'B' || w_ret;
    elsif w_uusi_desimaali = 12 then
    w_ret := 'C' || w_ret;
    elsif w_uusi_desimaali = 13 then
    w_ret := 'D' || w_ret;
    elsif w_uusi_desimaali = 14 then
    w_ret := 'E' || w_ret;
    elsif w_uusi_desimaali = 15 then
    w_ret := 'F' || w_ret;
    else w_ret := w_uusi_desimaali || w_ret;
    end if;

    -- Kun luku on muunnettu loppuun asti, on w_desimaaliluku 0, ja paluuarvo voidaan palauttaa.
    if (w_desimaaliluku = 0) then return (w_ret); end if;
    end loop;
    end; -- function luku_muunnos(desimaali_luku in number)
    --

  5. #5
    Join Date
    Dec 2000
    Location
    Ljubljana, Slovenia
    Posts
    4,439
    For conversion of "any base" to "any base" number (from-to bin, oct, dec, hex, or any other base), go to the following URL:

    http://osi.oracle.com/~tkyte/hexdec/index.html
    Jurij Modic
    ASCII a stupid question, get a stupid ANSI
    24 hours in a day .... 24 beer in a case .... coincidence?

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  


Click Here to Expand Forum to Full Width