Учитывая, что T- SQL равен трем, четыре шага кажутся нормальными.
Я бы поменял to_varchar()
на ::text
, как
coalesce(try_to_double(parse_json(fieldName):"json.path.to.value"::text),0)
также на json вопрос, если ваш объект выглядит так:
{
"json.path.to.value":10
}
, тогда у вас будет работать форма, но если у вас есть вложенные объекты, такие как:
{
json:{
path:{
to:{
value:66
}
}
}
}
, вам понадобится parse_json(fieldName):json.path.to.value::text
, как видно из:
select
coalesce(try_to_double(to_varchar(parse_json(fieldName):"json.path.to.value")),0)
,coalesce(try_to_double(parse_json(fieldName):"json.path.to.value"::text),0)
,coalesce(try_to_double(parse_json(fieldName):json.path.to.value::text),0)
from values
('{"json.path.to.value":0.1}'),
('{"json.path.to.value":10}'),
('{"json.path.to.value":"not a float"}'),
('{json:{path:{to:{value:66}}}}'),
('{"different_field_name":51}')
v(fieldName);
дает:
0.1 0.1 0
10 10 0
0 0 0
0 0 66
0 0 0