【问题标题】:TO_DECIMAL for SAP HANA Conversion from String从字符串转换为 SAP HANA 的 TO_DECIMAL
【发布时间】:2017-01-04 21:40:38
【问题描述】:

我正在使用 SAP HANA 数据库/表连接在 ArcGIS for Desktop 中添加查询图层。我想使用的表具有存储为字符串数据类型的经度和纬度字段。我想为此层编写一个查询,将这些字段转换为十进制数据类型,以便我能够呈现 XY 数据。

我的字段值的一个示例是经度:-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 位的精度?

【问题讨论】:

    标签: sql sap arcgis hana


    【解决方案1】:

    您似乎误解了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 
    

    【讨论】:

      【解决方案2】:

      考虑到经度/纬度的通常语义,即介于 -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) 表示目标小数类型有 8 位,其中小数点后为 6。

      请注意,绝对值 >= 1000(经度)和 >=100(纬度)的值将导致错误。如果您想在此处减少限制并在应用程序层捕获错误值,您可能需要使用更高的精度,例如to_decimal(LONGITUDE, 12,6).

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-08-18
        • 1970-01-01
        • 2017-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多