sql >> Databasteknik >  >> RDS >> Oracle

PL/SQL-procedur:UPPDATERA versaler till initcaps, med speciell hantering för vissa värden

Förutsatt att den speciella hanteringen endast är nödvändig för namn som 'S... , lägga till en enkel REPLACE borde fungera. BTW, du behöver inte två separata UPDATE uttalanden - INITCAP konverterar automatiskt icke-initialtecken till gemener.:

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

Detta kommer att ersätta alla förekomster av 'S med 's . Om du behöver hantera andra fall också, föreslår jag att du försöker REGEXP_REPLACE() .

Funktionen NLS_INITCAP hjälper till med vissa globaliseringsfrågor. Till exempel använder den både I med versaler och J i IJSLAND . Men det hjälper inte med 'S namn. Jag är inte säker på om det är ett fel med Oracles globaliseringsfunktioner eller om dessa stadsnamn alla är undantag.



  1. Importera .csv med tidsstämpelkolumn (dd.mm.åååå hh.mm.ss) med psql \copy

  2. Hur man återställer positionen för ett listobjekt i MySQL

  3. Hur man ignorerar frågetecken som platshållare när man använder PDO med PostgreSQL

  4. FEL 1067 (42000):Ogiltigt standardvärde för 'created_at'