Databricks中T-SQL字符串列数值格式化问题求助
解决Databricks中字符串列格式转换问题
需求回顾
处理字符串类型列tl_deal_deal_cur_cal,转换规则:
- 负数取绝对值
- 移除小数点,最后两位固定代表原小数部分(不足两位补0,如15.4需转为1540)
- 字符串前补0至15位
正确的Spark SQL实现
由于Databricks使用Spark SQL而非T-SQL,需适配Spark的函数特性,以下是修正后的语句:
SELECT lpad( cast( round(abs(cast(tl_deal_deal_cur_cal AS double)) * 100, 0) AS string ), 15, '0' ) AS formatted_col FROM your_table;
代码解释
- 绝对值转换:
abs(cast(tl_deal_deal_cur_cal AS double))将字符串转为数值后取绝对值,处理负数场景 - 小数位标准化:乘以100后用
round(...,0)确保小数部分补0到两位(如15.4→1540,7.23→723,0→0),若需截断而非四舍五入,可替换round为floor - 补0到15位:
lpad(...,15,'0')将处理后的数值转为字符串,左侧补0至总长度15位
测试案例验证
| 原始值 | 转换后结果 |
|---|---|
| 0 | 000000000000000 |
| 15 | 000000000001500 |
| 7.23 | 000000000000723 |
| 15.4 | 000000000001540 |
| -9.5 | 000000000000950 |
内容的提问来源于stack exchange,提问作者Galopito
相关产品推荐
相关产品推荐

