Re: [GENERAL] Geometric operators
selkovjr.mcs.anl.gov@mcs.anl.gov
From: selkovjr.mcs.anl.gov@mcs.anl.gov
To: Jeff Hoffmann <jeff@remapcorp.com>, pgsql-general@postgreSQL.org
Date: 1999-06-18T18:15:53Z
Lists: pgsql-general
> Steffen Zimmert wrote: > > > > Hello everybody, > > > > I am wondering if the geometric datatypes of the PostgreSQL system allow > > the following queries. > > The database should contain the box datatype which is used as the index. > > The system should allow queries like "Retrieve all boxes that are > > contained in the query box". Is that possible with the standard types of > > the system? > > It should be working (at least it worked fine in 6.4.2). The operator > you are looking for is "&&" which is a box overlap. For example, if you > create a table with a box field (we'll call it "box_field"), you could > create an index on it (if you have a lot of records): > > create index mytable_index on my_table using rtree (box_field box_ops); > > and then a select would be > > select * from mytable where box_field && '(100,100),(200,200)'::box; > > where the '(100,100),(200,200)'::box would be the bounding query box. That is not exactly so, if I may. '&&' is, like Steffen has already mentioned, an operator for overlap. What the original posting inquired about was containment. There are two operators for that, '~' and '@', with the meanings of 'contains' and 'contained', respectively. As a side comment, you don't need type-casting for the box constants -- they are coerced -- and you might as well omit parentheses: select * from mytable where box_field && '100,100,200,200'; unless you want to stay consistent with the way boxes represent themselves on the output. --Gene