【问题标题】:ERROR: malformed array literal in PostgreSQL错误:PostgreSQL 中的数组文字格式错误
【发布时间】:2021-08-13 03:58:13
【问题描述】:

我想在 postgresql 中对整数数组进行过滤,但是当我在下面执行查询时,它给了我格式错误的数组文字错误。

select * from querytesting where 1111111111 = any((jsondoc->>'PhoneNumber')::integer[]);

打开图片以供参考- https://i.stack.imgur.com/Py3Z2.png

【问题讨论】:

    标签: json postgresql


    【解决方案1】:

    any(x) 想要一个 PostgreSQL 数组作为x。但是,(jsondoc->>'PhoneNumber') 为您提供 JSON 数组的文本表示。一个 PostgreSQL 数组看起来像这样的文本:

    '{1,2,3}'
    

    但是您从 ->> 获得的 JSON 版本看起来像:

    '[1,2,3]'
    

    这两种数组不能混用。

    您可以改用JSON operator

    jsondoc->'PhoneNumber' @> 1111111111::text::jsonb
    

    使用 -> 而不是 ->> 会为您提供 JSON 数组而不是文本。然后您可以使用@> 查看您要查找的号码是否在该数组中。需要双重转换 (::text::jsonb) 将 PostgreSQL 数字转换为 @> 运算符的 JSON 数字。


    顺便说一句,将电话号码存储为数字可能不是最好的主意。您不对电话号码进行算术运算,因此它们根本不是真正的数字,它们实际上是包含数字字符的字符串。将电话号码格式标准化为国际标准,然后将它们视为字符串,从长远来看可能会为您提供更好的服务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-29
      • 1970-01-01
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多