You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2019中BIGINT转Decimal实现经纬度格式转换求助

解决SQL Server中BIGINT转经纬度Decimal的问题

你遇到的问题核心是没有先对BIGINT值做缩放处理——这些数值是把原经纬度的小数点去掉后得到的,所以需要先除以10^6(即1000000),再转换为Decimal类型。

正确转换方法

直接对BIGINT值执行除法运算后再转换:

-- 处理经度值-111021037
CAST(-111021037 / 1000000.0 AS DECIMAL(10,6))
-- 处理纬度值32409460
CAST(32409460 / 1000000.0 AS DECIMAL(10,6))

也可以用更严谨的写法,先转成浮点型再做除法,避免整数除法的截断问题:

CAST(CAST(-111021037 AS FLOAT) / 1000000 AS DECIMAL(10,6))
CAST(CAST(32409460 AS FLOAT) / 1000000 AS DECIMAL(10,6))

之前错误的原因分析

  1. 使用CAST(-111021037 AS DECIMAL(10,6))报错:
    DECIMAL(10,6)的总位数是10,其中小数位占6位,整数位最多只能有4位(10-6=4),而-111021037是9位整数,远超过4位的上限,因此触发算术溢出错误。

  2. 使用CAST(-111021037 AS DECIMAL(15,6))得到-111021037.000000:
    这个操作只是给原整数添加了6位小数后缀,并没有改变数值的实际大小,自然无法得到带小数点的目标经纬度值。

批量更新表数据的示例(如果需要修改表中字段)

假设你的表名为LocationTable,存储原始BIGINT值的字段是LongitudeBigInt和LatitudeBigInt,可以按以下步骤新增并更新Decimal类型的经纬度字段:

-- 先添加Decimal类型的经纬度字段
ALTER TABLE LocationTable ADD Longitude DECIMAL(10,6), Latitude DECIMAL(10,6);

-- 批量更新转换后的数据
UPDATE LocationTable
SET 
    Longitude = CAST(LongitudeBigInt / 1000000.0 AS DECIMAL(10,6)),
    Latitude = CAST(LatitudeBigInt / 1000000.0 AS DECIMAL(10,6));

内容的提问来源于stack exchange,提问作者D. Harms

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 08:37:11