2

У меня есть столбец географии с именем Location. Мне нужно ВЫБРАТЬ Location.Lat и Location.Long как один результат VARCHAR. Используя следующие я теряю точность:Преобразование географии SQL Lat/Long в VARCHAR без потери точности

Запрос:

SELECT CONVERT(VARCHAR(MAX), Location.Lat) + ' ' + CONVERT(VARCHAR(MAX), Location.Long) 

Оригинал Location.Lat: 52.2708633333333

Оригинал Location.Long: -9.73093666666667

форма Результат выше: 52.2709 -9.73094

Я понимаю, что это связано с тем, что Lat и Long являются плавающими и не имеют точности, указанной таким образом, что возможное обходное решение будет заключаться в том, чтобы заставить ее десятичную сперва с указанной точностью и затем преобразовать ее в varchar. Это похоже ..... неуклюжая, и того, чтобы выбрать случайную точность заставит либо

(а) потерю заднего значение, если оно слишком низкое или

(б) дополнительных ненужных значений хвостовых.

Пожалуйста, скажите мне, что у меня отсутствует функция или метод преобразования, чтобы вернуть их в качестве точных представлений varchar!

+0

Что * точность * Вы первоначально измерение широту и долготу? Знаете ли вы, что на четвертом знаке после запятой вы точно до десяти метров? У вас действительно есть измерения, которые настолько точнее, что вам нужно сохранить дополнительные цифры? –

+0

Да, я думаю, что 5 или 6 знаков после запятой были бы достаточно точными, но не любят жесткое кодирование произвольного значения, которое приводит к потере точности (независимо от того, как минутка, если это значение географии, которое я бы хотел использовать) – KrustyGString

ответ

3

Вам нужно что-то вроде этого:

SELECT CONVERT(VARCHAR(40),CAST(Location.Lat AS decimal(18,14))) + ' ' 
+ CONVERT(VARCHAR(40),CAST(Location.Long AS decimal(18,14))) 
+0

Спасибо Thanos. Если я не могу найти более аккуратный способ, я думаю, что мне придется использовать что-то вроде этого. – KrustyGString

+0

@KrustyGString Приятно знать, что я помог! –

-1

Я думаю, я должен ответить на мой собственный вопрос здесь, как кажется, нет никакой функциональности, которая отвечает критериям.

Чтобы получить желаемые результаты, по-видимому нужно использовать обходной путь, как заставить его первым десятичным с заданной точностью, а затем преобразовать его в VARCHAR (Танос ответ предоставляется образец этого при необходимости)

+0

Я думаю, что вы должны принять ответ @Thanos вместо публикации нового. – SepehrM

+2

Я частично согласен, поэтому переключится на прием ответа Thanos, но все еще не определился. Я специально спросил, есть ли что-то, поэтому мне не пришлось бы использовать обходной путь, как предложил Танос, поэтому мой собственный ответ «то, что я искал, не существует», но обходной путь полезен, поэтому он пойдет с ним. – KrustyGString

Смежные вопросы