postgresql - 从 jsonb 类型的一列中获取多个值
问题描述
我需要得到drXY, fromXY
,distInM
但它们都在 1 列中。我无法选择additional_data
作为获取所有列表的列,因为它不仅包含此信息。
在下图中,您可以看到此事件的确切列。
我没有尝试过任何事情,因为我不介意如何在 postgres 中执行此类请求
我希望看到这 2 个坐标和半径,就像请求的输出一样。
来自附加数据列的数据示例
{"cd":{"Query":"drXY:50.36212158,30.93627930,fromXY:50.36899347,30.92296243,distInM:1217"}}
{"cd": {"Query": "drXY:50.35106277,30.95141602,fromXY:50.33421340,30.98074794,distInM:2805"}}
{"cd": {"Query": "drXY:50.35106277,30.95141602,fromXY:50.33421340,30.98074794,distInM:2805"}}
{"cd": {"Query": "drXY:50.34796524,30.95644951,fromXY:50.33421340,30.98074794,distInM:2309"}}
{"cd": {"Query": "drXY:50.35132980,30.95157051,fromXY:50.33421340,30.98074794,distInM:2817"}}
解决方案
这有点棘手,因为实际的 Query 内容没有存储为正确的 JSON 值(这将使这变得非常容易)。我认为最简单的方法是在提取查询后使用正则表达式:
select substring(query from '(drXY:[0-9]+\.[0-9]+,[0-9]+\.[0-9]+)') as drxy,
substring(query from '(fromXY:[0-9]+\.[0-9]+,[0-9]+\.[0-9]+)') as fromxy,
substring(query, '(distInM:[0-9]+)') as dist
from (
select additional_data -> 'cd' ->> 'Query' as query
from the_table
where additional_data -> 'cd' ? 'Query'
) t;
推荐阅读
- r - 如何根据数字天值添加月份列
- python - TensorFlow 中的逐行相关
- python - Django 过滤器。什么更有效 - .filter(date__range) 或 .all() 并通过 Python 过滤
- python - 使用谷歌云Text2Speech时如何选择复音字(中文)的读音?
- asp.net-core - MassTransit ISendEndpoint.Send method doesn't throw exception when RabbitMQ is unreachable
- c# - 如何使用 .NET 5 获取跨平台系统型号名称?
- c# - 在 Asp.net 核心中本地化 DataAnnotations
- flutter - 如何在颤动中获得两次之间的时间?
- docker - 容器不再可以从外部访问(尽管 localhost 有效)
- android - Android 房间数据库迁移