Teradata中如何将无小数点的char类型转换为decimal类型
解决方案
方案1:通用数值除法(兼容性最强,所有数据库可用)
直接将char字段转为整数后除以100即可,写法最简单,不需要处理字符串拼接:
-- 通用写法示例,不同数据库转整数的函数略有差异 -- Oracle/PostgreSQL TO_NUMBER(your_char_col) / 100 -- MySQL CAST(your_char_col AS UNSIGNED) / 100 -- SQL Server CAST(your_char_col AS INT) / 100.0
以你给出的示例'000123456'为例,转成整数后为123456,除以100后刚好得到1234.56,完全符合要求。
方案2:TO_NUMBER配合格式符(适用于Oracle、PostgreSQL等支持格式参数的数据库)
可以用格式串中的V修饰符实现隐含小数位的转换,V的作用是标记隐含小数点的位置,后面跟的数字位数就是小数位数:
-- 9位char的最后2位为小数,所以格式串写9个数字位,V放在倒数第2位前面 TO_NUMBER(your_char_col, '9999999V99')
这个方案不需要做除法运算,逻辑上直接匹配存储时“隐含两位小数”的规则。
注意事项
两种方案都要求输入的char字段仅包含数字字符,否则会抛出转换错误,和之前用字符串插入小数点的方案校验要求一致。
内容的提问来源于stack exchange,提问作者moons
相关产品推荐
相关产品推荐

