【问题标题】:Cast uuid into a jsonb field将 uuid 转换为 jsonb 字段
【发布时间】:2023-02-10 03:04:26
【问题描述】:

考虑下表:

CREATE TABLE uuid_items (
  u uuid
);

CREATE TABLE jsonb_items (
  j jsonb
);
INSERT INTO uuid_items (u) values ('6de8874f-99f0-4b05-8c83-b904b3065ff0');
INSERT INTO jsonb_items (j) values ('"6de8874f-99f0-4b05-8c83-b904b3065ff0"');

现在,我想在jsonb_items上加入uuid_items。像这样:

SELECT * from uuid_items JOIN jsonb_items ON uuid_items.u::jsonb = jsonb_items.j;

这会给我错误:

Query Error: error: cannot cast type uuid to jsonb

我想过使用像 jsonb_build_array 这样的东西作为黑客:

SELECT * from uuid_items JOIN jsonb_items ON jsonb_build_array(uuid_items.u)->0 = jsonb_items.j;

但我想知道:有没有更好的方法?我如何将 uuid_items.u 转换为有效的 jsonb 值?

你可以玩playground here

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    您可以将两者都转换为text

    WHERE u::text = j ->> 0
    

    或者将两者都转换为jsonb

    WHERE to_jsonb(u) = j
    

    或者将两者都转换为uuid

    WHERE u = (j ->> 0)::uuid
    

    根据您已有的指标进行选择。最佳做法是对两列都使用正确的数据类型 (uuid)。

    【讨论】:

      猜你喜欢
      • 2020-08-16
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      • 2021-05-19
      相关资源
      最近更新 更多