Oracle
 sql >> Baza danych >  >> RDS >> Oracle

ORACLE RAW w formacie ciągu do standardowego GUID

Prostym sposobem jest przekonwertowanie RAW GUID na VARCHAR po jego wybraniu. Następnie odczytaj go z zestawu wyników jako String. Oto wzór:

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

To jest odniesienie, w którym znalazłem zapytanie (muszę je dostosować, ponieważ oryginał zawiera pewne błędy):https://community.oracle.com/thread/1063096?tstart=0 .

Lub jeśli chcesz to zrobić w Javie, przetłumaczenie powyższego rozwiązania w Javie jest dość proste:

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

Bardziej standardowy sposób przy użyciu klasy java.util.UUID nie jest możliwe, ponieważ implementacja Oracle SYS_GUID() nie jest zgodny z RFC 4122. Zobacz Jest Zgodny z Oracle SYS_GUID() UUID RFC 4122?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sqlplus jak znaleźć szczegóły aktualnie połączonej sesji bazy danych

  2. ALTER SESSION SET nls_date_format nie działa w APEX. Działa jednak w SQL Developer

  3. SQL - zachowaj kolejność na podstawie parametrów zapytania

  4. Wstawianie danych do bazy danych Oracle za pomocą php

  5. ORA-04076:nieprawidłowa NOWOŚĆ lub STARA specyfikacja - PL/SQL - Wyzwalacz Oracle