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

Oracle SQL: How to capitalize first character of column header rather than the value?

我构建了一个语句,将结果假脱机到一个 .json 文件中。

使用 SQLcl,它开始为:

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

然后,我做选择。举个例子:

SELECT
    INITCAP(ltl.language) language,

// ... goes on

输出:

"language":"En-Us"

这会将 language 的值大写——但是,如果我希望 language 在 .json 转储中成为 Language 怎么办?

我试过的是:

SELECT
    ltl.language INITCAP(language),

// ... goes on

但这不是一个有效的查询。

此外,在查询中将语言更改为 Language 没有任何区别 - 它已转换为小写:

SELECT
    INITCAP(ltl.language) Language,

输出:

"language":"en-US"

我想要的输出是:

输出:

"Language":"en-US"

如何从查询中实现?

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

您需要构建自己的 JSON 生成器,或者使用 RegEX 或您认为方便的任何内容编写一些 shell 脚本,并在事后初始化密钥。

您可以使用 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>

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

此致