decimal型转char型要去小数点的问题

使用下面命令查看decimal类型的缺省格式:
help session;
Default Numeric format:--(I).9(F)
上面格式使得decimal(n,0)格式缺省都会带小数点。
当我们需要把此字段和其他char型字段拼接时就会出现多个点的情况,一般去除这个点有以下三种方法:
下面是测试表的结构:
CREATE MULTISET TABLE test_table ,NO FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT
     (
      serial_no DECIMAL(14,0) TITLE '流水号' NOT NULL,
      .
      .
      .
      exch_date DATE FORMAT 'YYYYMMDD' TITLE '交易日期' NOT NULL)
PRIMARY INDEX ( serial_no ,exch_date );

未经过处理的数据:
SELECT
    'C'||cast(Exch_date as char(8))||trim(Serial_no)
    ,Exch_date
    ,Serial_no
from test_table

C200907162526. 2009-07-16 2526
C200907172109. 2009-07-17 2109
C200907161652. 2009-07-16 1652

1)使用format去点,需要去小数点的字段类型为decimal(n,0)时,format格式为'Z(n-1)9',此格式的意思是前n-1位如果前面有0则不显示,如果最后一位是0则显示,Z表示显示非0的数字,9表示显示数字,可以为0:
SELECT
    'C'||cast(Exch_date as char(8))||TRIM(Serial_no (format 'Z(13)9'))
    ,Exch_date
    ,Serial_no
from test_table

C200907162526 2009-07-16 2526
C200907172109 2009-07-17 2109
C200907161652 2009-07-16 1652

2)使用trailing去点
SELECT
    'C'||cast(Exch_date as char(8))||TRIM(trailing '.' from trim(Serial_no))
    ,Exch_date
    ,Serial_no
from test_table

C200907162526 2009-07-16 2526
C200907172109 2009-07-17 2109
C200907161652 2009-07-16 1652

3)将字段cast成integer格式,使用此法的前提条件是需要转换成integer类型的字段数据不能超过11位,否则会溢出,转换失败。
SELECT
    'C'||cast(Exch_date as char(8))||trim(cast(Serial_no as integer))
    ,Exch_date
    ,Serial_no
from test_table

C200907162526 2009-07-16 2526
C200907172109 2009-07-17 2109
C200907161652 2009-07-16 1652

建议使用第一种方法处理此问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值