【问题标题】:SQL JSON show one value of a string [duplicate]SQL JSON显示字符串的一个值[重复]
【发布时间】:2021-11-12 04:13:47
【问题描述】:

假设我的表中有 3 列。 (Postgres 数据库)

姓名、名字、通讯方式

我的通讯栏是包含此文本的字符串。

[{"typ":1,"kontext":1,"adresse":"031 *** ** **"},
 {"typ":2,"kontext":2,"adresse":"031 *** ** **"},
 {"typ":1,"kontext":2,"adresse":"+4179*******"}]

现在我想用姓名、名字和手机号码进行查询

如何在 typ = 1 和 kontext = 2 的字符串中捕获数字并使其成为新列?

【问题讨论】:

  • 特别是任何数据库?
  • 你好@user2210516,你能澄清你的问题吗?首先,您将姓名、名字和通信作为表格的列。但是在问题的下一部分中,您的 json 中有其他属性。请更具体地编辑您的问题
  • 这真的不适合SQL。您可能需要考虑重新设计,使数据库至少适合 NF1(同一列中没有不同的信息)。
  • @RonaldHaan 对不起,如果我不清楚。 json 在通信列内。而且我只想要里面那个字符串中的手机号码,并用手机号码而不是通讯列进行新的选择。

标签: sql json postgresql


【解决方案1】:

您可以使用 JSON 路径表达式:

select name, firstname, 
       jsonb_path_query_first(communication, '$[*] ? (@."typ"==1 && @.kontext == 2).adresse') #> '{}' as mobile_number
from the_table

这假定communication 被定义为jsonb 列(它确实应该是)。如果不是,您需要将其转换为communication::jsonb。它选择 typ 等于 1 且 kontext 等于 2 的第一个数组元素。

jsonb_path_query_first 返回 jsonb 值,而表达式 #> '{}' 将其转换为 text 值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 2013-01-23
    相关资源
    最近更新 更多