按字符集字段选择仅在使用trim或ilike时匹配

问题描述 投票:0回答:1

我有这张桌子:

dbchatbot=# \d messages
                            Table "public.messages"
     Column      |            Type             | Collation | Nullable | Default 
-----------------+-----------------------------+-----------+----------+---------
 uuid            | character varying(36)       |           | not null | 
 content         | text                        |           |          | 
Indexes:
    "messages_pkey" PRIMARY KEY, btree (uuid)
    "messages_uuid_idx" UNIQUE, btree (uuid)

*(我知道我应该使用

uuid
类型字段,但我继承了这个表,我无法更改它。)

有时当我通过

uuid
查询时匹配失败:

select uuid from messages where uuid = '3UUkCMIw3IzrYuwLnezDvL';
 uuid 
------
(0 rows)

如果我使用

ilike
就可以了:

select uuid from messages where uuid ilike '3UUkCMIw3IzrYuwLnezDvL';
          uuid          
------------------------
 3UUkCMIw3IzrYuwLnezDvL
(1 row)

或者如果我修剪字段值:

select uuid from messages where trim(uuid) = '3UUkCMIw3IzrYuwLnezDvL';
          uuid          
------------------------
 3UUkCMIw3IzrYuwLnezDvL
(1 row)

表的所有记录都没有失败:

select uuid from messages where uuid = '3wvMFFjZLD4aIsj64yLScA';
          uuid          
------------------------
 3wvMFFjZLD4aIsj64yLScA
(1 row)

我不能使用

ilike
trim
,因为我正在使用 ORM,并且我不想搞乱主键默认搜索。

我该如何解决这个问题?

sql postgresql
1个回答
0
投票

某些 UUID 似乎有无用的前导或尾随空格。只需修复它们即可:

update messages set
uuid = trim(uuid)
where trim(uuid) <> uuid;
© www.soinside.com 2019 - 2024. All rights reserved.