我有一个CHAR列,需要转换为SMALLINT列。CHAR列被定义为CHAR(4),并包含类似于此'360 '的数据,最后有一个空格。
我试图像这样使用CAST函数:
CAST(DCA_REVN_CD AS SMALLINT) AS REVN_CD这是我得到的错误:
-420 SMALLINT函数不能接受字符串参数的值。
有人能帮忙吗?我意识到这可能是因为数据中有一个空格。
发布于 2018-07-20 18:18:55
按照要求,above...would TRIM()工作?
不确定这是否有效,因为我已经有几年没有用DB2编写代码了,但这确实适用于MSSQL:
CAST(RTRIM(LTRIM(DCA_REVN_CD)) AS SMALLINT) AS REVN_CD或者DB2版本(我认为):
CAST(TRIM(DCA_REVN_CD) AS SMALLINT) AS REVN_CD发布于 2018-07-20 20:24:44
如果您只有尾随空格,则SMALLINT函数或您的强制转换将工作:
$ db2 "create table test (id smallint, value char(10))" ;
$ db2 "insert into test values (1, '1 ')" ;
$ db2 "insert into test values (2, '2 ')" ;
$ db2 "insert into test values (3, '3')" ;
$ db2 "select smallint(VALUE) from test";
1
-----------
1
2
3因此,您的强制转换应该正常工作,这意味着您在该列中有字符串而不是空格:
$db2 "insert into test values (4, '4 A')" ;
$db2 select SMALLINT(VALUE) from test";
SQL0420N Invalid character found in a character string argument of the
function "SMALLINT". SQLSTATE=22018建议:如果您使用的是db2 11或更高版本,则可以使用REGEXP_SUBSTR从该列中提取数字。
https://stackoverflow.com/questions/51447020
复制相似问题