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

Databricks SQL中CONCAT函数莫名添加.0字符的问题

问题:Databricks SQL中CONCAT拼接数值列出现.0后缀

问题场景

原始Parquet表数据:

ColAColB
1000125678
1892125678
2733189011

执行查询:

SELECT cola, colb, CONCAT(cola, colb) AS colc
FROM <目标Parquet表>

预期输出:

ColAColBColC
10001256781000125678
18921256781892125678
27331890112733189011

实际输出:

ColAColBColC
100012567810001.025678.0
189212567818921.025678.0
273318901127331.089011.0

原因分析

问题核心是列的数据类型:你看到的ColA、ColB表面是整数,但实际Parquet表中这两列的类型是浮点型(比如Double/Float),而非整数型(INT/BIGINT)。

Databricks SQL的CONCAT函数处理非字符串类型时,会自动将其转换为字符串格式。对于浮点型数值,哪怕存储的是整数,转字符串时也会保留.0的小数后缀,最终拼接后就出现了10001.025678.0这类结果。

而w3schools的测试环境中使用的是真正的整数类型,所以CONCAT直接按整数的字符串形式拼接,不会带.0。

解决方案

在拼接前,先将浮点型列转换为整数类型,或者直接转换为字符串类型,再执行CONCAT:

方案1:先转整数再拼接

SELECT 
  cola, 
  colb, 
  CONCAT(CAST(cola AS INT), CAST(colb AS INT)) AS colc
FROM <目标Parquet表>

方案2:直接转字符串拼接

SELECT 
  cola, 
  colb, 
  CONCAT(CAST(cola AS STRING), CAST(colb AS STRING)) AS colc
FROM <目标Parquet表>

两种方案都能得到预期的拼接结果。如果数据中存在非整数的浮点值,方案2会保留原始小数部分,方案1则会截断小数(需根据业务场景选择)。

内容的提问来源于stack exchange,提问作者Yoddlenod

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:24:25