我有一个部门表,其中有一个 jsonb 字段,该字段给出了如下所示的营业时间:
{
"Friday": {
"closeTime": "1970-01-01T17:00:00.000Z",
"isOpen": true,
"isOpen24Hours": false,
"openTime": "1970-01-01T08:00:00.000Z"
},
"Monday": {
"isOpen": false
},
"Saturday": {
"isOpen": false
},
"Sunday": {
"isOpen": false
},
"Thursday": {
"closeTime": "1970-01-01T17:00:00.000Z",
"isOpen": true,
"isOpen24Hours": false,
"openTime": "1970-01-01T08:00:00.000Z"
},
"Tuesday": {
"closeTime": "1970-01-01T17:00:00.000Z",
"isOpen": true,
"isOpen24Hours": false,
"openTime": "1970-01-01T08:00:00.000Z"
},
"Wednesday": {
"closeTime": "1970-01-01T17:00:00.000Z",
"isOpen": true,
"isOpen24Hours": false,
"openTime": "1970-01-01T08:00:00.000Z"
}
}
我有另一个表,将一天中的某些活动与某个部门相关联,我想知道活动发生当天该部门是否开放。那么如何用另一个表中的日期的星期几查询这个 jsonb 字段呢?
我尝试过类似的事情:
select a.activity_date, a.department_id,
d.hours_of_operation->to_char(a.activity_date, 'Day')->>'isOpen' as isOpen
from activity a
join department d on a.department_id = d.id
但仅当 Activity_date 是星期三时才返回 isOpen 值(这是 hours_of_operation jsonb 中的最后一个键)
Day
模板:附带的空白填充
完整大写的日期名称 (空白填充至 9 个字符)DAY
全大写的日期名称 (空白填充至 9 个字符)Day
完整的小写日期名称 (空白填充至 9 个字符)day
这意味着只有
Wednesday
没有任何空格,因为它已经有 9 个字符长了:demo
select quote_literal(to_char(a.activity_date, 'Day'))
,a.activity_date
,a.department_id
,(d.hours_of_operation->to_char(a.activity_date, 'Day'))->>'isOpen' as isOpen
from activity a
join department d on a.department_id = d.id
quote_literal | 活动日期 | 部门_id | 已开放 |
---|---|---|---|
|
2024-04-24 | 1 | 真实 |
|
2024-04-23 | 1 | 空 |
|
2024-04-22 | 1 | 空 |
|
2024-04-21 | 1 | 空 |
|
2024-04-20 | 1 | 空 |
|
2024-04-19 | 1 | 空 |
|
2024-04-18 | 1 | 空 |
|
2024-04-17 | 1 | 真实 |
trim()
就可以了:
select quote_literal(trim(to_char(a.activity_date, 'Day')))
,a.activity_date
,a.department_id
,(d.hours_of_operation->trim(to_char(a.activity_date, 'Day')))->>'isOpen' as isOpen
from activity a
join department d on a.department_id = d.id
quote_literal | 活动日期 | 部门_id | 已开放 |
---|---|---|---|
|
2024-04-24 | 1 | 真实 |
|
2024-04-23 | 1 | 真实 |
|
2024-04-22 | 1 | 假 |
|
2024-04-21 | 1 | 假 |
|
2024-04-20 | 1 | 假 |
|
2024-04-19 | 1 | 真实 |
|
2024-04-18 | 1 | 真实 |
|
2024-04-17 | 1 | 真实 |