SQL JSON显示字符串的一个值
SQL JSON显示字符串的一个值
假设我在我的表中有3列(Postgres数据库):Name,FirstName,Communication。我的Communication列是一个包含以下文本的字符串:
[{"typ":1,"kontext":1,"adresse":"031 *** ** **"},
{"typ":2,"kontext":2,"adresse":"031 *** ** **"},
{"typ":1,"kontext":2,"adresse":"+4179*******"}]
现在我想要使用Name、FirstName和手机号码进行查询。如何从字符串中提取出typ = 1且kontext = 2的号码,并将其作为新的列呈现?
问题的原因是想要在一个字符串中显示特定的值,但是由于字符串中包含了JSON格式的数据,所以需要使用特定的SQL语句来实现。
解决方法是使用JSON路径表达式来查询字符串中的特定值。首先需要确保所查询的字段是一个jsonb类型的列,如果不是,则需要通过将其强制转换为jsonb类型来处理。在SQL语句中使用jsonb_path_query_first函数来执行查询,该函数返回一个jsonb值,然后通过使用表达式#> '{}'将其转换为文本值。
具体的解决方法如下所示:
select name, firstname, jsonb_path_query_first(communication, '$[*] ? (@."typ"==1 && @.kontext == 2).adresse') #> '{}' as mobile_number from the_table
以上代码中的communication是一个jsonb类型的列,jsonb_path_query_first函数用于查询满足条件的值,表达式'$[*] ? (@."typ"==1 && @.kontext == 2).adresse'指定了查询条件,#> '{}'将查询结果转换为文本值。
通过以上的解决方法,我们可以从字符串中显示出特定的值。