Это интереснее, чем кажется на первый взгляд, потому что вы говорите «на указанном расстоянии».
Первое простое решение - вычисление расстояния Пифагора, то есть
SELECT * FROM myTable
WHERE SQRT( (myPositionX - @pointX)^2 + (myPositionY - @pointY)^2 ) = @myDistance
Однако сравнение с плавающей запятой по переменным никогда не является хорошей идеей из-за неточностей, и в этом случае это усложняется из-за квадратного корня, который на самом деле вам не нужен. Очевидно, что если расстояние от A до B равно X, то квадрат расстояния от A до B также равен X в квадрате. Следовательно, следующий разрез будет
SET @mySqrDistance = @myDistance^2
SELECT * FROM myTable
WHERE ( (myPositionX - @pointX)^2 + (myPositionY - @pointY)^2 ) = @mySqrDistance
Это не только делает его более точным из-за удаления SQRT, но и намного быстрее по той же причине (функции квадратного корня, хотя и оптимизированы, работают медленно). Однако у вас все еще есть проблема сравнения чисел до некоторой степени (конечно, это зависит от вида SQL и используемых типов столбцов, но в целом), поэтому лучшим подходом может быть
SET @mySqrDistanceMin = (@myDistance-@myError)^2
SET @mySqrDistanceMax = (@myDistance+@myError)^2
SELECT * FROM myTable
WHERE ( (myPositionX - @pointX)^2 + (myPositionY - @pointY)^2 )
BETWEEN @mySqrDistanceMin AND mySqrDistanceMax