我有一个包含日期名称的json作为键,我正在尝试使用今天作为键从json中选择值,今天是星期四。但是这不能按预期工作。
SELECT hoursJson->'normalHours'->'Thursday' FROM BusinessHours;
正确地返回json中包含的小时数,但是
SELECT hoursJson->'normalHours'->to_char(current_date, 'Day') FROM BusinessHours;
什么都不返回。
为什么to_char(current_date, 'Day')
不等于'Thursday'
当用作json键时? to_char()
返回文本,所以我不知道为什么这两个键不相等。如何使它们相等,以便我可以使用to_char()
作为json键?
谢谢!
答案 0 :(得分:1)
你有一个空白问题。来自fine to_char
manual:
Day
完整大写日名称(空格填充为9个字符)
注意"空白填充"部分。您未'Thursday'
获得to_char
,而您获得'Thursday '
这些是JSON中不同的密钥。
如果您想继续使用to_char
,那么您将不得不使用以下内容处理尾随空格:
...->trim(trailing ' ' from to_char(current_date, 'Day'))
...->regexp_replace(to_char(current_date, 'Day'), '\s+', '')
快速演示正在进行的活动(将在周四或周五开放):
您可能希望在JSON中使用不同的键,以便您根本不必处理空白,或者您可以编写自己的函数来隐藏to_char
和{{1}肮脏。