gpt4 book ai didi

database - 对某些值进行特殊处理的 PL/SQL 过程 : UPDATE uppercase names to initcaps,

转载 作者:搜寻专家 更新时间:2023-10-30 20:18:11 25 4
gpt4 key购买 nike

我需要一个程序来做这样的事情:原来的名字:阿姆斯特丹新名字:阿姆斯特丹。我为此做了这个程序:

create or replace PROCEDURE NaamRoutine
is
BEGIN
update Gemeentenew
set gemeentenaam = lower(gemeentenaam);
update Gemeentenew
set gemeentenaam = initcap(gemeentenaam);
END;

问题是有几个名称以 'S GRAVENHAGE 开头,需要是 's Gravenhage。

最佳答案

假设只有像 'S... 这样的名称需要特殊处理,添加一个简单的 REPLACE 应该可行。顺便说一句,您不需要两个单独的 UPDATE 语句 - INITCAP 会自动将非初始字符转换为小写。:

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

这会将所有出现的 'S 替换为 's。如果您还需要处理其他情况,我建议您尝试 REGEXP_REPLACE()

函数NLS_INITCAP帮助解决一些全局化问题。例如,IJSLAND中的IJ都大写。但它对 'S 名称没有帮助。我不确定这是否是 Oracle 全局化功能的错误,或者这些城市名称是否都是异常(exception)。

关于database - 对某些值进行特殊处理的 PL/SQL 过程 : UPDATE uppercase names to initcaps,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24174226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com