2

DB2 V9 z/os

背景:我有一个 4 列的表定义为(col1 int, col2 smallint, col3 int, col4 date)

第 1 行的值为 (1,123,456,2012-08-23)

当我执行以下操作时:

SELECT CAST(col2 AS VARCHAR(5)) CONCAT CAST(col3 AS VARCHAR(5))
  FROM db.T1 
 WHERE col1 = 1;

返回值 123456,这正是我想要的。

当我执行以下操作时:

UPDATE db.table2
   SET col3 = SELECT CAST(col2 AS VARCHAR(5)) CONCAT CAST(col3 AS VARCHAR(5))
  FROM db.T1 
 WHERE col1 = 1;

错误是:

SQL0408N 值与其赋值目标的数据类型不兼容。目标名称是“col3”。SQLSTATE=42821

我了解该错误是由于尝试将 varchar 插入整数。我还可以做些什么?我尝试过使用各种 CAST 语句,但无法将值插入 col3。我需要显示加入的值,如上所示。

任何帮助,将不胜感激。

4

2 回答 2

3

将所有演员表包装为决赛cast( ... as integer)应该有效:

UPDATE db.table2 
SET col3 = SELECT CAST(
        CAST(col2 AS VARCHAR(5)) CONCAT CAST(col3 AS VARCHAR(5)) 
    AS INTEGER)
FROM db.T1 
WHERE col1 = 1;
于 2012-08-23T15:16:50.660 回答
0

取决于您的小整数的最大值,您可以将它们转换为 base-9,然后与“9”连接。

CONCAT( IFNULL(CONV(sint1, 10, 9),''), 
        '9', 
        IFNULL(CONV(tint2, 10, 9),'')
      ) AS combined

另一种选择,也取决于你的小整数的最大值,到PAD-LEFT,其中一个为零。

CONCAT(
         sint1, 
         LPAD(tint2,3,0)
) AS combined

查看完整代码和解释:https ://mdb-blog.blogspot.com/2021/10/mysql-joincombine-2-smallinttinyint.html

于 2021-10-17T12:17:37.980 回答