Postgresql 如何检查json内部字段是否为空?
我表中的一列(称为details)是jsonb数据类型,数据格式如下:Postgresql 如何检查json内部字段是否为空?,postgresql,Postgresql,我表中的一列(称为details)是jsonb数据类型,数据格式如下: {"media_height":"350", "media_height":"450", "media_alt":"", "file_name":"myfile.jpeg"} 我之所以选择此字段,是因为我想标记缺少alt文本的记录 SELECT distinct ON ( p.property_name ) p.id, p.property_name,
{"media_height":"350", "media_height":"450", "media_alt":"", "file_name":"myfile.jpeg"}
我之所以选择此字段,是因为我想标记缺少alt文本的记录
SELECT
distinct ON ( p.property_name )
p.id, p.property_name,
CASE
WHEN mma.id IS NULL THEN 'Z'
WHEN mma.details->'media_alt'::TEXT IS NULL THEN 'NO'
ELSE 'YES' END as has_media_alt
FROM properties p
LEFT JOIN marketing_media_associations mma ON ( mma.reference_id = p.id )
GROUP BY p.id, p.property_name , mma.details->'media_alt', mma.id
ORDER BY p.property_name, has_media_alt ASC
上面的查询为我提供了Z的准确结果,但它从不在任何块中进行。这里缺少什么?空字符串与NULL不同,您可能需要:
WHEN nullif(mma.details->>'media_alt', '') IS NULL THEN 'NO'
如果使用直接返回值为
text
的->
,则不需要强制转换为文本。在本例中,媒体替换字段绝对不为空。这是一个空字符串。