2009-10-09 64 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%'; 

如果你想和運營商,在討論中的查詢應該工作正常不過,如果你。要使用或操作,那麼我上面的查詢大概是這樣做的更好的方式之一。