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

Memformat String UUID tanpa REGEXP_REPLACE dan PL/SQL

Sayangnya, Anda tidak dapat menyertakan literal string dalam format angka, jika tidak, Anda dapat mengonversi string hex ke angka lalu kembali lagi, menyisipkan literal dalam format mask di tempat yang tepat - tetapi Anda hanya dapat melakukannya untuk tanggal.

Anda dapat menggunakan substr() karena posisinya sudah pasti. Anda khawatir bahwa

Jelas saya tidak dapat menggunakan substr dan penggabungan karena setiap SUBSTR akan memproses SYS_GUID yang berbeda.

Menggunakan pemfaktoran subquery (alias ekspresi tabel umum/CTE) berarti substr() panggilan untuk baris dari CTE itu semua melihat GUID yang sama; metode ini tidak menghasilkan SYS_GUID baru untuk masing-masing metode.

with t as (
  select rawtohex(sys_guid()) guid from dual
  connect by level <= 2
)
select guid, substr(guid, 1, 8)
  ||'-'|| substr(guid, 9, 4)
  ||'-'|| substr(guid, 13, 4)
  ||'-'|| substr(guid, 17, 4)
  ||'-'|| substr(guid, 21, 12) as formatted_guid
from t;

GUID                             FORMATTED_GUID                         
-------------------------------- ----------------------------------------
2F6BA62518F926D0E0534D49E50ABB46 2F6BA625-18F9-26D0-E053-4D49E50ABB46    
2F6BA62518FA26D0E0534D49E50ABB46 2F6BA625-18FA-26D0-E053-4D49E50ABB46    

Itu jauh lebih cepat daripada regex pada jumlah data yang lebih besar. Dengan 100000 nilai dalam satu loop (dalam blok PL/SQL, lakukan sedikit pekerjaan di dalam loop untuk membuatnya benar-benar mengevaluasi dengan benar, dan menggunakan dbms_utility.get_cpu_time untuk memeriksa waktu yang telah berlalu) versi regex membutuhkan waktu sekitar 2,51 detik, sedangkan versi substring membutuhkan waktu sekitar 0,29 detik. Sistem Anda akan mendapatkan angka yang berbeda tentu saja, tetapi seharusnya masih dalam urutan besarnya yang sama.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Subquery Oracle tidak melihat variabel dari blok luar 2 level ke atas

  2. Cara Memesan Berdasarkan Tanggal di PostgreSQL atau Oracle

  3. Permintaan rekursif di Oracle

  4. Kesalahan koneksi localhost Java Oracle (ORA-12505)

  5. PL/SQL Gateway di R11i