Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

ORACLE RAW dalam format string ke GUID Standar

Cara sederhana adalah mengonversi RAW GUID ke VARCHAR saat Anda memilihnya. Kemudian baca dari hasil yang ditetapkan sebagai String. Ini rumusnya:

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

Ini adalah referensi tempat saya menemukan kueri (saya harus menyesuaikannya karena aslinya memiliki beberapa kesalahan):https://community.Oracle.com/thread/1063096?tstart=0 .

Atau jika Anda ingin melakukannya dengan Java, maka menerjemahkan solusi di atas ke dalam Java cukup sederhana:

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

Cara yang lebih standar menggunakan kelas java.util.UUID tidak mungkin karena Oracle mengimplementasikan SYS_GUID() tidak sesuai dengan RFC 4122. Lihat Apakah Sesuai dengan 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. SQL tidak menampilkan nilai nol pada kueri yang tidak sama?

  2. Dapatkan hanya tanggal tanpa waktu di Oracle

  3. Perbedaan antara SQL Server dan Oracle 'Pengguna'

  4. Strategi untuk meningkatkan kinerja Oracle DELETE

  5. Pertanyaan bergabung SQL