【问题标题】:postgres extract int array from textpostgres 从文本中提取 int 数组
【发布时间】:2018-11-14 09:06:16
【问题描述】:

我有以下 postgresql 语句:

SELECT 1 = ANY( jsonb_array_elements_text('[2, 1, 3]') );

基本上我有一个字符串,其中包含一个用逗号分隔的整数数组,例如:[1, 2, 3],有时这个数组也可能是空的,例如:[]。现在,我想编写一个查询(作为更大查询的一部分),我可以在其中找出一个元素是否与文本中的任何整数匹配。例如:

SELECT 1 = ANY( jsonb_array_elements_text('[2, 1, 3]') ); -- Should return true
SELECT 1 = ANY( jsonb_array_elements_text('[]') ); -- should return false

但是,上述查询失败并显示错误消息:

ERROR:  op ANY/ALL (array) requires array on right side
LINE 1: SELECT 1 = ANY( jsonb_array_elements_text('[2, 1, 3]') );

任何帮助我如何从文本中提取整数数组以便我可以在连接条件中使用它?

如果重要的话,我正在使用 postgres 9.4。

【问题讨论】:

  • 使用原生整数数组而不是 JSON 会容易得多:1 = any(array[1,2,3])
  • 是的,毫无疑问。但这是更大查询的一部分,因此为简洁起见,我在此处进行了简化。

标签: sql arrays json postgresql


【解决方案1】:

我找到了。答案是:

SELECT 1 IN (SELECT json_array_elements('[2, 1, 3]')::text::int);
SELECT 1 IN (SELECT json_array_elements('[]')::text::int);
SELECT 1 IN (SELECT json_array_elements('[12, 10, 3]')::text::int);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多