Oracle
 sql >> база данни >  >> RDS >> Oracle

ORACLE RAW във формат на низ към стандартен GUID

Лесен начин е да конвертирате RAW GUID във VARCHAR, когато го изберете. След това го прочетете от набор от резултати като низ. Това е формулата:

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

Това е препратката, където намерих заявката (трябва да я коригирам, защото оригиналът има някои грешки):https://community.oracle.com/thread/1063096?tstart=0 .

Или ако искате да го направите с Java, тогава преводът на горното решение в 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");
}

По-стандартен начин с използване на класа java.util.UUID не е възможно, тъй като изпълнението на Oracle на SYS_GUID() не е съвместим с RFC 4122. Вижте Is SYS_GUID() UUID на Oracle 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. ORA-01830 при преобразуване на числа в думи

  2. Как да изберете записи с максимални стойности в две колони?

  3. Необходими насоки:Backend SQL логика за динамичен избор на поле от потребителите в интерфейса

  4. Oracle:Промяна на колона VARCHAR2 на CLOB

  5. Как да извлечете множество редове от съхранена функция с Oracle