3

在 Postgresql 8 中为什么这样可以

select * from prod where code like '1%'
select * from prod where code like '%1'

但这会返回 0 行(有以数字 1 开头/结尾的代码)

select * from prod where code like '1%1'

更新

这发生在我当前的安装中:

# psql --version
psql (PostgreSQL) 8.3.7


create table a(code char(10));
CREATE TABLE
db=# insert into a values('111');
INSERT 0 1
db=# select * from a where code like '1%';
    code
------------
 111
(1 row)

db=# select * from a where code like '%1';
 code
------
(0 rows)

db=# select * from a where code like '1%1';
 code
------
(0 rows)

更新 2

它是数据类型!使用 varchar 就可以了!

谢谢你。

4

2 回答 2

8

是因为数据类型是 char(10) 吗?

这意味着即使您只是插入较短的内容,例如“111”,它也将始终占用 10 个字符。因此,如果您不使用以“1”结尾的 10 个字符的字符串,“%1”和“1%1”将永远不会匹配。

于 2009-10-09T11:49:32.450 回答
1

(编辑:我发布了以下内容(使用 AND 运算符,而不是 OR)。

SELECT * FROM prod WHERE code LIKE '%1' OR code LIKE '1%';

如果您想要 AND 运算符,则问题中的查询应该可以正常工作。但是,如果您想使用 OR 运算符,那么我上面的查询可能是更好的方法之一。

于 2009-10-09T11:17:34.500 回答