如何从带有条件的表中选择json列?

时间:2019-02-11 14:34:11

标签: json postgresql

在PostreSQL 9.6中,我有一个表contact_information

CREATE TABLE contact_information
(
  employee_id UUID NOT NULL PRIMARY KEY,
  messengers JSON NOT NULL
);

INSERT INTO contact_information 
  (employee_id, messengers) 
VALUES 
  ('8b5fbfec-d213-426c-86fa-4fda5f586319', '[{"Type":"skype","IDs":["some skype id","another skype id"]}]');

我需要选择ID包含子字符串的所有employee_id,例如“ id ILIKE'%other%'”。

我尝试了什么:

SELECT
  ci.employee_id,
  json_array_elements(json_array_elements(ci.messangers)->'IDs'::text)::text AS ids
FROM contact_information AS ci

并得到:

3ba6feba-ff81-11e4-9408-984be16afda1    "some skype id"
3ba6feba-ff81-11e4-9408-984be16afda1    "another skype id"

但是我无法在WHERE IDs ILIKE'%other%'中添加语句-列ID不存在。

如果我正在尝试

SELECT
  ci.employee_id
FROM contact_information AS ci
WHERE json_array_elements(json_array_elements(ci.messangers)->'IDs'::text)::text ILIKE '%other%'

知道:错误:在WHERE中不允许使用返回设置的函数。

有解决这个问题的主意吗?

1 个答案:

答案 0 :(得分:1)

已解决:

public boolean isPalindrome(String string)
{
    if (string.length() > 2) {
        if (string.charAt(0) == string.charAt(string.length() - 1)) {
            return this.isPalindrome(string.substring(1, string.length() - 1));
        } else {
            return false;
        }
    } else if (string.length() == 1) {
        return true;
    } else {
        if (string.charAt(0) == string.charAt(1)) {
            return true;
        } else {
            return false;
        }
    }
}

对不起一个愚蠢的问题=(