Как выбрать точки в SQL Server 2012 на основе географии, если они являются текстовыми полями
Хорошо, я застрял с этой базой данных, и я пытаюсь создать для нее "соседнюю" страницу.
Что у меня есть (к сожалению) lat
и lon
столбец, которые nvarchar
, Я не могу конвертировать их, потому что они нужны в другом месте как текст.
Я хотел бы взять центр точки карты и добавить несколько точек в пределах мили или около того.
Можно ли как-то объединить эти 2 текстовых поля в один столбец координат для сравнения STDistance
?
Чтобы сделать что-то вроде этого..
SELECT *
FROM goelocs
WHERE coords.STDistance(geography::Point(54.1020, -115.12338, 4326)) <=(1609.344)
Или вы можете порекомендовать лучший способ?
Заранее спасибо!
1 ответ
Решение
Если твой NVarchar
столбцы являются только числовым значением, например:
- широта: '54.103'
- Ион: '-115,1'
SQL Server будет обрабатывать неявно преобразование их в float
, Следующий запрос будет работать:
SELECT *
FROM geolocs geo
WHERE
ISNUMERIC(geo.lat) = 1
AND ISNUMERIC(geo.lon) = 1
AND geography::Point(geo.lat, geo.lon, 4326).STDistance(geography::Point(54.1020, -115.12338, 4326)) <= (1609.344)