2017-01-04 3 views
1

Я использую соединение SAP HANA DB/table для добавления слоя запросов в ArcGIS for Desktop. Таблица, которую я хотел бы использовать, имеет поля долготы и широты, хранящиеся в виде строковых типов данных. Я хотел бы написать запрос для этого слоя, который преобразует эти поля в виде десятичных типов данных, чтобы я мог представить данные XY.TO_DECIMAL для SAP HANA Преобразование из строки

Пример моих значений полей является долготой: -117.619193 и широты: 33.453381

Ошибка, которая выбрасывается в General error; 319 decimal scale specifier is out of range: 6:(0-3)::S1000

Запрос:
select "JOBID", TO_DECIMAL(LONGITUDE,3,6) AS "LONG_DEC", TO_DECIMAL(LATTITUDE,3,6) AS "LAT_DEC" from "_SYS_BIC"."SEU.GD.LM/CA_KT_TICKETSTATUS"

При изменении десятичных идентификаторов 3 , моя точность не будет такой же правильной; как это должно быть изменено для поддержания точности 6 знаков после запятой?

ответ

2

Возможно, вы неправильно поняли параметры для TO_DECIMAL() function.

TO_DECIMAL (<value> [, <precision>, <scale>]) 

С

TO_DECIMAL(LONGITUDE,3,6) 

вы просите за 3 цифр точности и 6 цифр шкале.

Я предполагаю, что вы намеревались был противоположностью установка:

select 
     TO_DECIMAL(-117.619193 , 6, 3) AS "LONG_DEC" 
     , TO_DECIMAL(33.453381 , 6, 3) AS "LAT_DEC" 
from dummy; 

LONG_DEC LAT_DEC 
-117.619 33.453 
0

Учитывая обычную семантику долготы/широты, будучи значения между -180 и 180/-90 и 90, и принимая во внимание, что вы хотите сохранить точность 6 десятичных знаков (после запятой), я думаю, вам нужно следующее заявление:

select "JOBID", 
    TO_DECIMAL(LONGITUDE,9,6) AS "LONG_DEC", 
    TO_DECIMAL (LATTITUDE,8,6) AS "LAT_DEC" 
from "_SYS_BIC"."SEU.GD.LM/CA_KT_TICKETSTATUS 

TO_DECIMAL (Lattitude, 8,6) woud означает тип целевого десятичную с 8 мест, из которых 6 после десятичной точка.

Знайте, что значения с абсолютным значением> = 1000 по долготе и> = 100 для широты приведут к ошибке. Если вы хотите сделать здесь менее ограничительные и поймать неправильные значения на прикладном уровне, вы можете использовать более высокую точность, например. to_decimal (LONGITUDE, 12,6).

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