2009-10-09 3 views
2

В Postgresql-почему это нормально"LIKE" не работает, как ожидалось

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

но это возвращает 0 строк (там коды главной страницы/окончания с цифрой 1)

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

Update

Это происходит в моей нынешней инсталяции:

# 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) 

Update 2

Это тип данных! С varchar это нормально!

спасибо.

+0

Возможно, вы захотите изменить свой вопрос - я этого не понимал. Если postgres не показывает данные с кодом «111» (например) с вашими запросами, тогда что-то нарушается, но, честно говоря, я действительно не верю в это. Покажите нам данные, запрос, полученный результат и ожидаемый результат. – 2009-10-09 11:17:20

ответ

7

является ли это потому, что тип данных CHAR (10)?

Это означает, что он всегда будет занимать 10 символов даже хотя вы просто вставляете что-то более короткое, как «111». Поэтому, если вы это сделаете не используйте 10-значную строку с «1» в конце, «% 1» и «1% 1» никогда не будут совпадать.

+0

хороший ответ с объяснением mr.anonymousen –

1

(EDIT:. Я отправил следующее (с с и оператором, а не OR)

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

Если вы хотите, и оператор, то запрос в вопросе должен работать хорошо, однако, если вы. хотите использовать оператор ИЛИ, то мой запрос, показанный выше, вероятно, один из лучших способов сделать это.

Смежные вопросы