Ajuda com Este SQL

Estou precisando montar um SQL no seguinte cenário:

Uma tabela com Latitudes e Longitudes:

Pensei em enviar 4 parâmetros 1 latitude e Longitude inicial e 1 latitude e longitude final, e precisava que me trouxesse registros que estivesse dentro deste intervalo, não sei se teria outra forma eu fiz assim, porém não encontrei nada, só que a tabela gigantesca, não acredito que não exista nenhum registro neste intervalo:

SELECT R.* FROM TSROTADET R
WHERE (R.LATITUDE  BETWEEN '-25,949061' AND '-26,270519')
AND ( R.LONGITUDE BETWEEN '-53,096176' AND '-52,711133');

Se alguém puder ajudar aí, desde já agradeço todas as repostas?

1 curtida

-25 é maior que -26 pelo que o between nunca deverá retornar dados

Olá pmlm
E como posso montar este SQL?

Trocando os valores?

É que eu não tenho como saber qual valor estará maior ou não! Não vai alterar os resultados?
Eu poderia tentar validar algo, “Se este é maior que este” e colocar por primeiro.

Para usar o between terás sempre de colocar primeiro o menor valor.

BETWEEN <MENOR> AND <MAIOR>

Entendi!!!
Vou tentar aqui!!
Muito obrigado!!

Então @pmlm pmlm

Fiz as validações mas o SQL precisa ser desta forma Sempre:
Pois o que é passado por parâmetro são LATINI e LONGINI e LATFIM e LONGFIM

SELECT R.* FROM TSROTADET R
WHERE (R.LATITUDE  BETWEEN 'LATINI' AND 'LONGINI')
AND ( R.LONGITUDE BETWEEN 'LATFIM' AND 'LONGFIM');

Aí dá diferença.

O banco de dados é Oracle? Estes dados são coordenadas, certo? Estão salvos assim mesmo? Talvez utilizar algo do GDO facilite (ou complique).

Isso mesmo Luis, o Banco é Oracle, se puder me explicar melhor o GDO, ou outra forma, desde já agradeço.

Eu só coloquei os nomes das variáveis, pois antes tinha colocado valores.

Presumo que esses valores sejam variáveis e não strings literais.

SELECT R.* FROM TSROTADET R
 WHERE R.LATITUDE  BETWEEN LEAST(:LATINI, :LATFIM) AND GREATEST(:LATINI, :LATFIM)
  AND R.LONGITUDE BETWEEN LEAST(:LONGINI, :LONGFIM) AND GREATEST(:LONGINI, :LONGFIM);
1 curtida

Exatamente, são Variáveis!

Trouxe informações, era isso mesmo que precisava, muito obrigado, só adicionei o IDROTA, para controlar mais o resultado e trazer de um determinado trecho.