sql >> Databasteknik >  >> RDS >> Sqlserver

Få alla punkter (cirklar med radie), som överlappar en given punkt

Ja, det här är precis sånt som geography och rumsliga metoder är bra på. Här är ett kort exempel:

DECLARE @Restaurant TABLE (
    Name nvarchar(50),
    Location geography,
    DeliveryRadiusMetres int
);

INSERT @Restaurant
VALUES
-- long lat
('Dominos','POINT(-0.109339 51.532835)',2000 ),
('Pizza Hut','POINT(-0.102961 51.541157)',2000 );

Observera att här för att konstruera geography värden Jag använder en implicit konvertering från sträng, som bakom kulisserna kallar geography::Parse .

DECLARE @MyLocation geography = 'POINT(-0.115063 51.550231)';

SELECT
    Name
FROM
    @Restaurant R
WHERE
    R.Location.STDistance(@MyLocation) <= R.DeliveryRadiusMetres
;


  1. order_by on Many-to-Many-fältet resulterar i dubbla poster i queryset

  2. Få returvärde från SQL Stored Procedure med PHP

  3. Är det möjligt att fånga ett brott mot främmande nyckel i postgres

  4. CREATE DATABASE-frågan med java jdbc och förberedd sats returnerar syntaxfel