我有以下问题 json :
[
{
"transition":"random_word",
"from":"paris",
"to":"porto",
"date":{
"date":"2020-05-28 11:51:25.201864",
"timezone_type":3,
"timezone":"Europe\/Paris"
}
},
{
"transition":"rainbow",
"from":"porto",
"to":"faro",
"date":{
"date":"2020-06-06 23:10:06.878539",
"timezone_type":3,
"timezone":"Europe\/Paris"
}
},
{
"transition":"banana",
"from":"faro",
"to":"rio_de_janeiro",
"date":{
"date":"2020-06-06 23:14:10.975099",
"timezone_type":3,
"timezone":"Europe\/Paris"
}
},
{
"transition":"hello",
"from":"rio_de_janeiro",
"to":"buenos_aires",
"date":{
"date":"2020-06-06 23:14:15.314370",
"timezone_type":3,
"timezone":"Europe\/Paris"
}
}
]
Imagine I want 回溯到最后一站 我的旅行者(最后一个json对象中的键 "to "的值。 这里:buenos_aires)和 日子 (此处 :2020-06-06 23:14:15.314370)。
我知道要用PostgreSQL来做,应该如何进行?
如果你说的 "last "是指元素在数组中显示的顺序,你可以使用 jsonb_array_length()
来获取数组的长度,然后用它来获取最后一个元素。
select (the_json_column -> jsonb_array_length(the_json_column) - 1) ->> 'to' as "to",
(the_json_column -> jsonb_array_length(the_json_column) - 1) #>> '{date,date}' as "date"
from the_table
这个表达式 jsonb_array_length(the_json_column) - 1
计算数组中 "最后 "元素的索引。
如果您的列被定义为 json
而非 jsonb
(应该是)你需要使用等价的 json_array_length()
而不是。