«LIKE» не работает должным образом - PullRequest
2 голосов
/ 09 октября 2009

В 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 ]

7 голосов
/ 09 октября 2009

Это потому, что тип данных char (10)?

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

1 голос
/ 09 октября 2009

(РЕДАКТИРОВАТЬ: я опубликовал следующее (с оператором AND, а не OR).

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

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

...