to_char()输出为json键不是文本? (Postgres的)

时间:2015-02-06 04:58:49

标签: json postgresql

我有一个包含日期名称的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键?

谢谢!

1 个答案:

答案 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+', '')

快速演示正在进行的活动(将在周四或周五开放):

  

http://sqlfiddle.com/#!15/2a77b/23

您可能希望在JSON中使用不同的键,以便您根本不必处理空白,或者您可以编写自己的函数来隐藏to_char和{{1}肮脏。