ST_Within toma dois objetos de figura geométrica e retorna 1 (VERDADEIRO) se o primeiro objeto estiver completamente dentro do segundo; do contrário, retornará 0 (FALSO).
Sintaxe
db2gse.ST_Within(g1 db2gse.ST_Geometry, g2 db2gse.ST_Geometry)
Tipo de retorno
Inteiro
Exemplos
No exemplo abaixo são criadas duas tabelas. A primeira, BUILDINGFOOTPRINTS, contém as bases de construção da cidade. A segunda tabela, LOTS, contém os lotes da cidade. O engenheiro da cidade deseja verificar se todas as bases de construção estão inteiramente dentro de seus lotes.
Nas duas tabelas, o tipo de dados de multipolígono armazena a figura geométrica das bases e lotes de construção. O projetista selecionou os multipolígonos para os dois recursos, porque os lotes podem ser desmembrados por recursos naturais, como um rio e que as bases de construção podem ser geralmente constituídas de vários edifícios.
CREATE TABLE BUILDINGFOOTPRINTS ( building_id integer, lot_id integer, footprint db2gse.ST_MultiPolygon); CREATE TABLE LOTS ( lot_id integer, lot db2gse.ST_MultiPolygon );
Utilizando a seguinte instrução SELECT, o engenheiro da cidade primeiro seleciona as construções que não estão completamente dentro de um lote.
SELECT building_id FROM BUILDINGFOOTPRINTS, LOTS WHERE db2gse.ST_Within(footprint,lot) <> 1;
Embora a primeira consulta forneça uma lista de todos os BUILDINGS_IDs que têm bases foram de um polígono do lote, ela não determinará se o restante possui a id de lote atribuído a eles. Esta segunda consulta executa uma verificação de integridade dos dados na coluna LOT_ID da tabela BUILDINGFOOTPRINTS.
SELECT bf.building_id "building id", bf.lot_id "buildings lot_id", LOTS.lot_id "LOTS lot_id" FROM BUILDINGFOOTPRINTS bf, LOTS WHERE db2gse.ST_Within(footprint,lot) = 1 AND LOTS.lot_id <> bf.lot_id;