Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

ORACLE RAW ở định dạng chuỗi thành GUID tiêu chuẩn

Một cách đơn giản là chuyển đổi RAW GUID thành VARCHAR khi bạn chọn nó. Sau đó, đọc nó từ tập kết quả dưới dạng Chuỗi. Đây là công thức:

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

Đây là tài liệu tham khảo mà tôi đã tìm thấy truy vấn (tôi phải điều chỉnh nó vì bản gốc có một số lỗi): https://community.oracle.com/thread/1063096?tstart=0 .

Hoặc nếu bạn muốn làm điều đó với Java thì để dịch giải pháp trên sang Java cũng khá đơn giản:

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

Một cách chuẩn hơn bằng cách sử dụng lớp java.util.UUID không thể thực hiện được vì Oracle triển khai SYS_GUID() không tuân thủ RFC 4122. Xem Is Tương thích với SYS_GUID () UUID RFC 4122 của Oracle?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bản cập nhật SQL có ảnh hưởng đến truy vấn con của nó trong quá trình chạy cập nhật không?

  2. Xóa các số 0 ở đầu khỏi nhà phát triển varchar sql

  3. tạo bảng với công đoàn chọn không có ràng buộc

  4. Cách tránh lỗi đột biến bảng

  5. Oracle, dữ liệu Blob bị thiếu trong tệp xuất của tôi