DB2 SQL将CHAR转换为SMALLINT

时间:2018-07-20 16:39:16

标签: sql db2

我有一个#include <assert.h> #include <ctype.h> #include <errno.h> #include <float.h> #include <limits.h> #include <math.h> #include <memory.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <Windows.h> #include <mysql.h> #include <graphviz/gvc.h> int main() { GVC_t *gvc; gvc = gvContext(); Agraph_t *g; g = agopen("test", Agdirected, NULL); Agnode_t *signal1; signal1 = agnode(g, "Signal1_ON", TRUE); Agnode_t *signal2; signal2 = agnode(g, "Signal1_OFF", TRUE); Agedge_t *link = agedge(g, signal1, signal2, "link1", TRUE); agattr(g, AGEDGE, "label", "transitionlink"); gvLayout(gvc, g, "dot"); gvRenderFilename(gvc, g, "dot", "test.dot"); gvFreeLayout(gvc, g); agclose(g); gvFreeContext(gvc); system("pause"); return 0; } 列,我需要将其转换为CHAR列。 SMALLINT列定义为CHAR,其中包含像CHAR(4)这样的数据,并在末尾有一个空格。

我试图像这样使用'360 '函数:

CAST

这是我得到的错误:

  

-420字符串参数的值对于SMALLINT函数不可接受。

有人可以帮忙吗?我意识到这可能是因为数据中有空间。

2 个答案:

答案 0 :(得分:0)

如上所述,... 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

答案 1 :(得分:0)

如果只有尾随空格,则SMALLINT函数或CAST将起作用:

$ 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

因此,您的CAST应该可以正常工作,这意味着您在该列中除了空格以外还具有其他字符串:

$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从此列中仅提取数字。