“LIKE”无法按预期工作

时间:2009-10-09 11:00:38

标签: postgresql sql-like

在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就可以了!

谢谢。

2 个答案:

答案 0 :(得分:7)

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

这意味着即使你只是插入一些像“111”这样的东西,它总会占用10个字符。因此,如果最后不使用带有“1”的10个字符的字符串,则“%1”和“1%1”将永远不会匹配。

答案 1 :(得分:1)

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

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

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