如何使用Oracle将列值转换为CamelCase?

13

我需要一种在 Oracle 10g 中将列值转换为 CamelCase 的方法。我希望能够在我的选择语句中进行内联,但如果必须使用函数,也可以。

我不需要支持下划线,只需要支持空格。

谢谢


我不确定我理解这个问题。如果您在表中以全部小写字母存储了一个值,那么任何函数如何知道如何将其转换为CamelCase?该函数至少需要拥有所有可用单词的字典,以便找出字符串“camelcase”应该转换为“CamelCase”。如果您的字符串中的任何单词都不是字典单词,则生活变得更具挑战性。 - Justin Cave
2
@JustinCave:你真的没有理解问题 :-) "camel case" -> "CamelCase"。注意"camel"和"case"之间的空格。这是指示符。 - Daniel Hilgarth
据我所知,没有内置的功能可以做到这一点。你尝试过什么来实现这个目标? - Daniel Hilgarth
好的。那么您的意图是从字符串中删除每个空格,并将字符串的第一个字符大写,以及在空格后紧跟的任何字母也变为大写? - Justin Cave
@DanielHilgarth,是的,你说得对。我正在尝试实现“驼峰式大小写”->“CamelCase”。我知道没有内置函数,所以我正在寻找一种方法来实现...我已经尝试了一些方法,但变得越来越混乱,希望有更简洁的方法。 - Ayyoudy
@JustinCave,是的,这就是想法。将字符串的第一个字母大写...将空格后面的每个字母大写,并将所有其他字符取消大写(小写)... - Ayyoudy
2个回答

43

我猜使用 initcap()replace() 的组合可以解决问题:

select replace(initcap('hi ben'),' ') from dual;

REPLA
-----
HiBen

这段代码的作用是将每个单词的首字母大写,并将空格替换为空。

如果第一个字符是数字,它显然无法正常工作:

select replace(initcap('go 2stack overflow'),' ') from dual;

REPLACE(INITCAP(
----------------
Go2stackOverflow

太棒了!我之前不知道有initcap内置函数!它的效果非常好...谢谢。 - Ayyoudy

3

这不是我对驼峰命名法的理解

select substr(lower('Camel Case means the first char should be lower cased'),1,1)||substr(replace(initcap('Camel Case means the first char should be lower cased'),' '),2) from dual;

camelCaseMeansTheFirstCharShouldBeLowerCased                                    
1 row selected.

CamelCase也可以是第一个字母大写的形式。现在有些人用小写字母作为变量的第一个字母。 - Chris Catignani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接