Oracle SQL:如何大写列标题的第一个字符而不是值?

时间:2018-08-16 12:30:29

标签: sql oracle oracle-sqldeveloper sqlcl

我已经建立了一条语句,将结果假脱机到.json文件中。

使用SQLcl,它的开头为:

SET ENCODING UTF-8
SET SQLFORMAT JSON
SPOOL language.json

然后,我选择。只是一个例子:

SELECT
    INITCAP(ltl.language) language,

// ... goes on

输出:

"language":"En-Us"

这将大写language的值-但是,如果我想在.json转储中将language设为Language怎么办?

我尝试过的是:

SELECT
    ltl.language INITCAP(language),

// ... goes on

但这不是有效的查询。

此外,在查询中将语言更改为“语言”没有区别-它已转换为小写字母:

SELECT
    INITCAP(ltl.language) Language,

输出:

"language":"en-US"

我想要的输出是:

输出:

"Language":"en-US"

如何从查询中实现?

2 个答案:

答案 0 :(得分:3)

您不能影响使用/ * json * /或SQLFORMAT json时生成的json值对KEYS的情况。根据我们的Oracle规范,这些在设计上是小写的。

您将需要构建自己的JSON生成器,或使用RegEX或您发现的方便使用的脚本编写一些shell脚本,并在事后初始化键。

答案 1 :(得分:1)

您可以使用regexp_replace()函数。

我不知道您是如何构成最终的JSON有效负载的,但是解决方法如下:

select regexp_replace('"language":"en-US"', '[a-z]', upper(substr('"language":"en-US"', 2, 1)), 1, 1, 'i') 
from dual ; 


SQL> select regexp_replace('"language":"en-US"', '[a-z]', upper(substr('"language":"en-US"', 2, 1)), 1, 1, 'i') language from dual

LANGUAGE
------------------
"Language":"en-US"

SQL>

此实现假定第一个字母是您要转换的字母,但是此字母在预期的双引号字符之后。 (字符串中的第二位)

致谢