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

Formatowanie ciągu UUID bez REGEXP_REPLACE i PL/SQL

Nie możesz niestety dołączyć literałów ciągów w formatach liczb, w przeciwnym razie możesz przekonwertować ciąg szesnastkowy na liczbę, a następnie z powrotem, wstawiając literały w masce formatu we właściwych miejscach - ale możesz to zrobić tylko dla dat.

Możesz użyć substr() ponieważ pozycje są ustalone. Obawiałeś się, że

Oczywiście nie mogę używać substr i konkatenacji, ponieważ każdy SUBSTR przetwarzałby inny SYS_GUID.

Korzystanie z faktoringu podzapytania (znanego również jako wspólne wyrażenie tabelowe/CTE) oznacza, że ​​substr() wzywa do wiersza z tego CTE, wszystkie widzą ten sam identyfikator GUID; ta metoda nie generuje nowego SYS_GUID dla każdego z nich.

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    

To dużo szybciej niż wyrażenie regularne na większej ilości danych. Z 100000 wartościami w pętli (w bloku PL/SQL, wykonanie minimalnej pracy wewnątrz pętli, aby właściwie ocenić, i użycie dbms_utility.get_cpu_time aby sprawdzić upływ czasu) wersja regex zajmuje około 2,51 sekundy, a wersja podłańcuchowa około 0,29 sekundy. Twój system otrzyma oczywiście różne liczby, ale nadal powinny one być mniej więcej tego samego rzędu wielkości.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcje a procedury w Oracle

  2. Oracle:wyeksportuj tabelę z blobami do pliku .sql, który można ponownie zaimportować

  3. Oracle Database BLOB do InputStream w Javie?

  4. Automatyczny przyrost dla Oracle

  5. REGEXP_SUBSTR() Funkcja w Oracle