You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何诊断PostgreSQL 15中下划线通配符查询失效问题?

问题原因及解决办法

问题根源

你使用了CHAR(20)作为字段类型,这是固定长度字符类型,当插入的字符串长度小于20时,PostgreSQL会自动在字符串末尾填充空格,直到总长度达到20。也就是说,你的'Joe'实际存储的是'Joe' + 17个空格,'Zoe'是'Zoe' + 17个空格。

而LIKE '_oe'的匹配逻辑是:寻找恰好3个字符,且第一个字符任意、后两个是'oe'的字符串。但实际存储的字符串长度是20,自然无法匹配,所以返回空结果。

解决方案

方案1:修改字段类型为可变长度(推荐)

名字这类长度不固定的内容,更适合用VARCHAR(n)类型存储,它不会自动填充空格:

-- 直接修改现有表的字段类型
ALTER TABLE people ALTER COLUMN names TYPE VARCHAR(20);

-- 或者重新建表(如果数据量不大)
DROP TABLE IF EXISTS people;
CREATE TABLE people (
    names VARCHAR(20)
);
INSERT INTO people VALUES ('Joe'), ('John'), ('Johanna'), ('Zoe');

修改后再执行你的查询SELECT * FROM people WHERE names LIKE '_oe';,就能得到预期的结果。

方案2:查询时去除尾部空格

如果不想修改表结构,可以用TRIM()函数去掉字段值的尾部空格后再匹配:

SELECT * FROM people WHERE TRIM(names) LIKE '_oe';

内容的提问来源于stack exchange,提问作者Darrell Carvalho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:10:33