使用下面命令查看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
建议使用第一种方法处理此问题。