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

ORACLE RAW ve formátu řetězce na standardní GUID

Jednoduchým způsobem je převést RAW GUID na VARCHAR, když jej vyberete. Poté jej přečtěte ze sady výsledků jako řetězec. Toto je vzorec:

select 
 upper(
    regexp_replace(
        regexp_replace(
            hextoraw('9BB2A2B8DF8747B0982F2F1702E1D18B'),
            '(.{8})(.{4})(.{4})(.{4})(.{12})',
            '\1-\2-\3-\4-\5'
        ),
        '(.{2})(.{2})(.{2})(.{2}).(.{2})(.{2}).(.{2})(.{2})(.{18})',
        '\4\3\2\1-\6\5-\8\7\9'
    )
 ) from dual

Toto je odkaz, kde jsem našel dotaz (musím ho upravit, protože originál obsahuje nějaké chyby):https://community.oracle.com/thread/1063096?tstart=0 .

Nebo pokud to chcete udělat s Javou, pak je přeložení výše uvedeného řešení v Javě docela jednoduché:

/**
 * input: "9BB2A2B8DF8747B0982F2F1702E1D18B"
 * output: "B8A2B29B-87DF-B047-982F-2F1702E1D18B";
 */
public String hexToStr(String guid) {       
    return guid.replaceAll("(.{8})(.{4})(.{4})(.{4})(.{12})", "$1-$2-$3-$4-$5").replaceAll("(.{2})(.{2})(.{2})(.{2}).(.{2})(.{2}).(.{2})(.{2})(.{18})", "$4$3$2$1-$6$5-$8$7$9");
}

Standardnější způsob pomocí třídy java.util.UUID není možné, protože Oracle implementace SYS_GUID() není v souladu s RFC 4122. Viz Je Vyhovuje SYS_GUID() UUID RFC 4122 společnosti Oracle?



  1. Co je uživatelské jméno/heslo pro připojení na pracovní ploše MySQL?

  2. MySQL REGEXP Žádné prázdné znaky, žádná čísla

  3. Hromadný import SQL z CSV

  4. Připojte se ke mně na konferenci návrhářů databází PAUG