假设我有一个字符串ABC&EFG d.d.
,并在调用initcap
之后
select initcap("ABC&EFG d.d.") from dual;
我会得到Abc&Efg D.D.
这对于第一部分是完美的,但不是我需要的字母d.d.
成为D.D.
的部分。
所以我需要一个不会大写字母后跟点的initcap版本。
谁知道是否有这样的可能性?
只是澄清,因为我正在寻找潜在的内置功能。</ p>
答案 0 :(得分:2)
您可以使用正则表达式过滤字符串仅用于文本,然后跳过&#39; d.d。&#39;因为它不匹配正则表达式并在匹配的字符串上运行initcap
。然后找到&#39; d.d。&#39;并在initcap
之后将其连接到字符串。
select initcap(REGEXP_SUBSTR('ABC'||chr(38)||'EFG d.d.','(\w\&?\w)+') )
|| REGEXP_SUBSTR('ABC'||chr(38)||'EFG d.d.','(\s(\w\.)+)+') from dual;
请注意REGEXP_SUBSTR
返回单个匹配项,因此这可能不适用于更复杂的字符串(即多个匹配项)。
答案 1 :(得分:2)
select
regexp_replace(
initcap(
regexp_replace('ABC&EFG d.d.', '(\w+\.)', chr(1)||'a\1')
),
chr(1)||'.')
from dual;
答案 2 :(得分:1)
我会考虑用一长串随机字符(例如“sejvbwovbworuvybqerouyoqvuyrfwhrverhbeqorybquoyquobf”)替换所有.s,运行initcap,然后再用.s替换你的随机字符串。
Replace(
InitCap(
Replace('ABC&EFG d.d.', '.', 'sejvbwovbworuvybqero')),
'sejvbwovbworuvybqero','.')
未测试!
心灵可能有更优雅的方法。