3

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 を使用すると、OK です。

ありがとうございました。

4

2 に答える 2

8

データ型がchar(10)だからでしょうか。

これは、「111」のような短いものを挿入しただけでも、常に 10 文字を占めることを意味します。したがって、末尾に「1」を含む 10 文字の文字列を使用しないと、「%1」と「1%1」は一致しません。

于 2009-10-09T11:49:32.450 に答える
1

(編集:以下を投稿しました(ORではなくAND演算子を使用)。

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

AND 演算子が必要な場合、質問のクエリは問題なく動作するはずです。ただし、OR 演算子を使用する場合、上記のクエリはおそらくそれを行うためのより良い方法の 1 つです。

于 2009-10-09T11:17:34.500 に答える