首页 > 解决方案 > 如何在 PostgreSQL 中将字符变化(varcar)与 UUID 进行比较?

问题描述

运算符不存在:字符变化 = 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:没有运算符与给定名称和参数类型匹配( s)。您可能需要添加显式类型转换。

标签: postgresql

解决方案


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

正如 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'!)


推荐阅读