2009-10-09 56 views
2

工作在PostgreSQL 8,为什么这是确定“LIKE” 并不如预期

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

但这返回0行(有码begining /用数字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它是好的!

谢谢。

+0

你可能想编辑你的问题 - 我不明白。如果postgres没有在你的查询中显示代码为“111”的数据,那么有些事情会被破坏,但说实话 - 我真的不相信它。向我们显示数据,查询,收到结果和预期结果。 – 2009-10-09 11:17:20

回答

7

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

这意味着它永远占据10个字符,即使尽管你只是插入一些像“111”这样短的东西,所以,如果你这样做最后不要使用带有“1”的10个字符的字符串,“%1”和“1%1”永远不会匹配。

+0

解释很好的答案mr.anonymousen – 2009-10-09 12:23:42

1

(编辑:我曾发表了以下的(与AND运算符,而不是OR)

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

如果你想和运营商,在讨论中的查询应该工作正常不过,如果你。要使用或操作,那么我上面的查询大概是这样做的更好的方式之一。