You need to enable JavaScript to run this app. PostgreSQL如何正确提取jsonb列中存储的周一打卡时间值
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何正确提取jsonb列中存储的周一打卡时间值

问题核心原因

之前的查询无法得到预期结果,根源是PostgreSQL jsonb操作符的使用和取值层级匹配错误:

  • 操作符使用不当:->> 'Monday'会直接把Monday对应的整个json对象(包含checkin、checkout的结构)序列化为纯文本输出,无法拆分得到两个独立的时间字段
  • 取值层级不足:没有穿透到Monday节点下的子属性层,没法单独提取checkin、checkout的具体值
修正后的可执行SQL

原本的拆分数组逻辑(jsonb_array_elements(daysprofile) as dayp)是正确的,只需要修正取值链路,逐层穿透到目标字段即可:

SELECT 
  name,
  dayp -> 'days' -> 'Monday' ->> 'checkin' AS monday_checkin,
  dayp -> 'days' -> 'Monday' ->> 'checkout' AS monday_checkout
FROM attendanceprofile,
jsonb_array_elements(daysprofile) as dayp;
输出结果说明

对照样例json结构,上述查询会返回两个独立的结构化时间字段:

  • 周一签到时间:7:00
  • 周一签退时间:18:00

可选优化:如果需要过滤掉未配置周一考勤规则的无效行,避免输出空值记录,可在查询末尾增加过滤条件:

WHERE dayp -> 'days' -> 'Monday' IS NOT NULL

内容的提问来源于stack exchange,提问作者Benjamin Y

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.08 17:36:08