sql - 使用动态生成的值检查 postgres json 中是否存在键
问题描述
我想检查我的 json 数据类型中的键,其中键是一周的数字。基本上,我使用这个函数来获取下周的数字:extract(week FROM current_date) + 1
现在我想使用返回的值来检查这个键是否存在于我的对象中,如果不存在则返回一个空对象:
SELECT dv.unitid as id,
CASE
WHEN dv.internaldata IS NULL THEN '{}'
WHEN dv.internaldata::json->'officePlan' IS NULL THEN '{}'
ELSE dv.internaldata::json->'officePlan'-> extract(week FROM current_date) + 1
END as officeplan,
甚至可以这样做吗?还有另一种更好的方法吗?
解决方案
您需要将结果转换为extract
文本值
SELECT dv.unitid as id,
CASE
WHEN dv.internaldata IS NULL THEN '{}'
WHEN dv.internaldata::json -> 'officePlan' IS NULL THEN '{}'
ELSE dv.internaldata::json -> 'officePlan' -> (extract(week FROM current_date) + 1)::text
END as officeplan,
但是您实际上并不需要 case 表达式开始,您可以使用coalesce()
coalesce(dv.internaldata -> 'officePlan' -> (extract(week FROM current_date) + 1)::text, '{}')
推荐阅读
- html - 将 PSD 切片为 HTML 以获得更多分辨率
- websphere-mq-fte - MFT 传输后的存档文件
- python - 如何在 matplotlib 中绘制多元列与连续数据列的图?
- python - 使用 Cognito 用户池调用 AWS APIGateway
- php - 如何告诉用户有人使用他们的帐户登录?
- python - ValueError: int() 以 10 为底的无效文字:''。请在这里帮助我
- ios - 节点快速设置以接收使用 iOS Swift/Objective-C 协议发送的文件 uploadTaskWithRequest:fromFile:completionHandler:
- soap - 时不时的 SOAP
- laravel - 使用 laravel 分析的用户活动请求
- sparql - SPARQL:有没有办法以属性为中心?