У меня есть десятичное значение, хранящееся в виде строки в столбце JSON:Извлечение JSON строку и отливать в десятичную
{"path": {"to": {"decimal": "123.45"}}}
можно извлечь десятичное значение с помощью #>
оператора:
SELECT foo #> '{path,to,decimal}'
FROM (
SELECT '{"path": {"to": {"decimal": "123.45"}}}'::json AS foo
) AS footable
Но результатом является типа JSON:
"123.45"
Если я ок го его числовая:
SELECT (foo #> '{path,to,decimal}')::numeric
FROM (
SELECT '{"path": {"to": {"decimal": "123.45"}}}'::json AS foo
) AS footable
Я получаю ошибку:
cannot cast type json to numeric
Если я бросил его в текст и затем числовой:
SELECT (foo #> '{path,to,decimal}')::text::numeric
FROM (
SELECT '{"path": {"to": {"decimal": "123.45"}}}'::json AS foo
) AS footable
текст Строка цитируется, которая не сбрасывает t о цифровом:
invalid input syntax for type numeric: ""123.45""
Что такое правильный способ для извлечения значения из структуры JSON, и получить значение в качестве не- JSon типа?
Ваш JSON не так, почему бы не вставить { "путь": { "к": { "десятичный": 123,45}}} вместо { "путь": { "к": {"decimal": "123.45"}}} (обратите внимание на цитаты около 123.45) –
Цель сохранения десятичного числа в виде строки - это точная точность. – cpburnz