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

Procedura PL/SQL:UPDATE nazwy wielkich liter do initcaps, ze specjalną obsługą niektórych wartości

Zakładając, że specjalna obsługa jest konieczna tylko dla nazw takich jak 'S... , dodając prosty REPLACE powinno działać. BTW, nie potrzebujesz dwóch oddzielnych UPDATE instrukcje - INITCAP automatycznie skonwertuje znaki inne niż początkowe na małe litery.:

with v_data(name) as (
  select 'AMSTERDAM' from dual union all
  select '''S GRAVENHAGE' from dual union all
  select 'DEN HAAG' from dual union all
  select 'IJSLAND' from dual
  )
select 
  replace(nls_initcap(name, 'NLS_SORT=xDutch'), '''S', '''s') name
from v_data

Name
----
Amsterdam
's Gravenhage
Den Haag
IJsland

Spowoduje to zastąpienie wszystkich wystąpień 'S z 's . Jeśli potrzebujesz zająć się również innymi przypadkami, proponuję spróbować REGEXP_REPLACE() .

Funkcja NLS_INITCAP pomaga w niektórych kwestiach związanych z globalizacją. Na przykład pisuje zarówno I i J w IJSLAND . Ale to nie pomaga w przypadku 'S nazwy. Nie jestem pewien, czy jest to błąd w funkcjach globalizacji Oracle, czy te wszystkie nazwy miast są wyjątkami.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zaktualizuj tabelę z innej tabeli w Oracle

  2. Zapytanie SQL DIFFDATE zwraca nieprawidłowy identyfikator

  3. Pobierz i odbierz zbiorczo z REF CURSOR zwróconego w ramach procedury

  4. W jakich przypadkach Oracle tworzy indeksy automatycznie?

  5. Uzyskiwanie sekund między dwoma znacznikami czasu Oracle