sql >> Databáze >  >> RDS >> Oracle

Procedura PL/SQL:AKTUALIZUJTE názvy velkých písmen na initcaps se speciálním zpracováním některých hodnot

Za předpokladu, že speciální zpracování je nutné pouze pro názvy jako 'S... , přidáním jednoduchého REPLACE měl by pracovat. BTW, nepotřebujete dva samostatné UPDATE příkazy - INITCAP automaticky převede jiné než počáteční znaky na malá písmena.:

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

To nahradí všechny výskyty 'S s 's . Pokud potřebujete řešit i jiné případy, doporučuji zkusit REGEXP_REPLACE() .

Funkce NLS_INITCAP pomáhá s některými globalizačními problémy. Například, píše velkými písmeny jak I a J v IJSLAND . Ale to nepomůže s 'S jména. Nejsem si jistý, zda se jedná o chybu globalizačních funkcí Oracle, nebo zda jsou tyto názvy měst výjimkou.



  1. Oracle objednávejte za různých podmínek

  2. Co je MySQL ekvivalentem STUFF() na SQL Serveru?

  3. Nápověda k dotazu MySQL Cross-Table Count(*).

  4. Jak zkontrolovat, zda něco existuje v databázi postgresql pomocí django?