Как выбрать точки в 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) 
Другие вопросы по тегам