PostgreSQL sẽ thực hiện việc này nếu bạn xây dựng chỉ mục bằng text_pattern_ops hoặc nếu bạn đang sử dụng đối chiếu C.
Nếu bạn đang sử dụng một số đối chiếu ngẫu nhiên khác, PostgreSQL không thể suy ra nhiều điều về nó. Hãy quan sát điều này, trong đối chiếu "en_US.utf8" rất phổ biến.
select * from (values ('03.000221.1'), ('03.0002212'), ('03.000221.3')) f(x) order by x;
x
-------------
03.000221.1
03.0002212
03.000221.3
Sau đó, điều này tự nhiên dẫn đến câu trả lời sai với truy vấn của bạn:
select * from (values ('03.000221.1'), ('03.0002212'), ('03.000221.3')) f(id)
where ((id >= '03.000221.'::text) AND (id < '03.000221.Z'::text))
id
-------------
03.000221.1
03.0002212
03.000221.3