sql >> Databasteknik >  >> RDS >> Oracle

ORACLE RAW i strängformat till Standard GUID

Ett enkelt sätt är att konvertera RAW GUID till VARCHAR när du väljer den. Läs det sedan från resultatuppsättningen som en sträng. Detta är formeln:

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

Det här är referensen där jag hittade frågan (jag måste justera den eftersom originalet har några fel):https://community.oracle.com/thread/1063096?tstart=0 .

Eller om du vill göra det med Java så är det ganska enkelt att översätta ovanstående lösning till 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");
}

Ett mer standardiserat sätt att använda klassen java.util.UUID inte möjligt eftersom Oracle-implementering av SYS_GUID() är inte kompatibel med RFC 4122. Se Is Oracles SYS_GUID() UUID RFC 4122-kompatibel?



  1. Android-fel:Värde <br av typen java.lang.String kan inte konverteras till JSONObject

  2. Frågan tar timeout från webbappen men körs bra från managementstudio

  3. Uppgradering av MariaDB 10.0 till 10.3.9 på Ubuntu 16.04

  4. Vad är storleksgränsen för ett varchar2 PL/SQL-underprogramargument i Oracle?