Oracle SQL: как использовать первый символ заголовка столбца, а не значение?
Я построил оператор, в котором результат помещается в файл.json.
С SQLcl он начинается как:
SET ENCODING UTF-8
SET SQLFORMAT JSON
SPOOL language.json
Затем я делаю выбор. Просто пример:
SELECT
INITCAP(ltl.language) language,
// ... goes on
Выход:
"language":"En-Us"
Это будет капитализировать стоимость language
- а что если я захочу language
быть Language
в дамп.json?
Я попробовал следующее:
SELECT
ltl.language INITCAP(language),
// ... goes on
Но это неверный запрос.
Кроме того, изменение языка на язык в запросе не имеет значения - оно преобразуется в нижний регистр:
SELECT
INITCAP(ltl.language) Language,
Выход:
"language":"en-US"
Мой желаемый результат:
Выход:
"Language":"en-US"
Как мне добиться этого из запроса?
2 ответа
Вы не можете влиять на случай пары ключей JSON, генерируемой KEYS при использовании /*json*/ или SQLFORMAT json. В соответствии с нашей спецификацией Oracle, они предназначены для строчных букв.
Вам нужно было бы создать свой собственный генератор JSON или написать несколько сценариев оболочки с использованием RegEX или чего-то еще, что вам пригодится, чтобы ввести ключи после завершения.
Вы можете использовать функцию 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>
Эта реализация предполагает, что первая буква - это та, которую вы хотите преобразовать, но эта буква идет после ожидаемого символа двойной кавычки. (второе место в строке)
С уважением