Sql 在Postgres数据库中查询表中单个JSON列中两个键的组合
我正在使用一个数据库(运行Postgres 13)表,该表有一个JSON列,其结构大致如下:Sql 在Postgres数据库中查询表中单个JSON列中两个键的组合,sql,json,postgresql,Sql,Json,Postgresql,我正在使用一个数据库(运行Postgres 13)表,该表有一个JSON列,其结构大致如下: { first_name: 'Alex', last_name: 'Smith', my_other: 'info', ... } 我需要编写一个按用户全名搜索的查询(即,“{first_name}{last_name}”),但我不知道如何构建一个“虚拟化”的全名列,该列组合了名字键和姓氏键中的值。如果要测试JSON列是否同时包含名字和姓氏,可以执行以下操作: where the_co
{
first_name: 'Alex',
last_name: 'Smith',
my_other: 'info',
...
}
我需要编写一个按用户全名搜索的查询(即,
“{first_name}{last_name}”
),但我不知道如何构建一个“虚拟化”的全名列,该列组合了名字键和姓氏键中的值。如果要测试JSON列是否同时包含名字和姓氏,可以执行以下操作:
where the_column @> '{"first_name": "Alex", "last_name": "Smith"}'::jsonb
SELECT (col->>'first_name') || ' ' || (col->>'last_name') FROM A
这假设您的JSON列的类型是
jsonb
(应该是)。如果不是,则需要强制转换:列::jsonb
如果要测试JSON列是否同时包含名字和姓氏,可以执行以下操作:
where the_column @> '{"first_name": "Alex", "last_name": "Smith"}'::jsonb
SELECT (col->>'first_name') || ' ' || (col->>'last_name') FROM A
这假设您的JSON列的类型是
jsonb
(应该是)。如果不是,则需要强制转换:列::jsonb
您只需要使用|
操作符将两个值连接起来。如果json列名为col
,表名为A
,则可以执行以下操作:
where the_column @> '{"first_name": "Alex", "last_name": "Smith"}'::jsonb
SELECT (col->>'first_name') || ' ' || (col->>'last_name') FROM A
->
操作符从json对象中提取一个字段作为文本,即您想要的内容。(我使用了一些括号,因为现在我不记得|
和->
之间的优先级。)
另外,请注意,如果您只想检查json列是否包含两个属性,那么you不需要“虚拟化”全名。您只需使用@
(或即可,您只需使用|
运算符将这两个值连接起来。如果json列命名为col
,表名为A
,则您可以执行以下操作:
where the_column @> '{"first_name": "Alex", "last_name": "Smith"}'::jsonb
SELECT (col->>'first_name') || ' ' || (col->>'last_name') FROM A
->
操作符从json对象中提取一个字段作为文本,即您想要的内容(我使用了一些括号,因为现在我不记得|
和->
之间的优先级)
另外,请注意,如果您只想检查json列是否包含两个属性,那么you不需要“虚拟化”全名。您可以使用@>
(或