sql >> Database teknologi >  >> RDS >> Oracle

ORACLE RAW i strengformat til Standard GUID

En enkel måde er at konvertere RAW GUID til VARCHAR, når du vælger den. Læs det derefter fra resultatsæt som en streng. Dette er formlen:

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

Dette er referencen, hvor jeg har fundet forespørgslen (jeg er nødt til at justere den, fordi originalen har nogle fejl):https://community.oracle.com/thread/1063096?tstart=0 .

Eller hvis du vil gøre det med Java, så er det ret simpelt at oversætte ovenstående løsning til Java:

/**
 * 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");
}

En mere standard måde at bruge klassen java.util.UUID er ikke mulig, fordi Oracle-implementering af SYS_GUID() er ikke kompatibel med RFC 4122. Se Is Oracles SYS_GUID() UUID RFC 4122-kompatibel?



  1. MySQL Cursor Loop opdateres ikke

  2. Indsættelse af dato fra formular ved hjælp af PHP Mysql

  3. Oracle SQL fuld hierarki givet enhver node som input

  4. Fejl 1046 Ingen database valgt, hvordan løses det?