我有一个#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函数不可接受。
有人可以帮忙吗?我意识到这可能是因为数据中有空间。
答案 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从此列中仅提取数字。