如何在PostgreSQL中将字符变化(varcar)与UUID进行比较?

时间:2019-03-21 17:47:27

标签: postgresql

运算符不存在:字符变化= uuid

客户端ID为UUId,应该是无法使用的原因。

哪里错了,因为我已经尝试了几乎所有我想像的东西。

SELECT * FROM "cobranca_assinatura"
INNER JOIN "cadastro_cliente" ON ("cobranca_assinatura"."cliente_id" = "cadastro_cliente"."id")
WHERE "cadastro_cliente"."nome" LIKE marcelo% ESCAPE '\'
  

[2019-03-21 14:40:34] [42883]错误:运算符不存在:   角色变化= uuid [2019-03-21 14:40:34]   Dica:无运算符   匹配给定的名称和参数类型。您可能需要添加   显式类型转换。

1 个答案:

答案 0 :(得分:1)

uuid是一种特定的数据类型。对您来说,它看起来像文本,但事实并非如此。您不能使用字符串函数(uuid like "abc%")比较uuid,也不能将它与文本进行比较。

如塔默(Tamer)所建议,如果需要比较,可以先进行投射。

SELECT * 
FROM (SELECT 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11'::uuid as my_uuid) foo 
WHERE my_uuid::text like 'a%'

例如,上面我通过将字符串转换为uuid类型来创建uuid。 (如果您尝试将任何旧字符串都用uuid大小写,则会失败,因为'abc'不能是uuid)。

然后使用名为“ my_uuid”的uuid项,我将其强制转换回字符串以使用字符串比较。 (请注意,“ A”变成“ a”!)