Postgresql 如何检查json内部字段是否为空?

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,

我表中的一列(称为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,
                        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
->
,则不需要强制转换为文本。

在本例中,媒体替换字段绝对不为空。这是一个空字符串。