db2 CONCATENATION,smallint,将整数转换为整数列

xlpyo6sf  于 2022-11-07  发布在  DB2
关注(0)|答案(2)|浏览(151)

DB2 V9 z/os系统
背景:我有一个定义为(col1 int, col2 smallint, col3 int, col4 date)的4列表
第1行的值为(1,123,456,2012年8月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;

错误为:
SQL 0408 N某个值与其赋值目标的数据类型不兼容。目标名为“col 3”。SQLSTATE=42821
我知道这个错误是由于试图将一个varchar插入一个整数。我还能做什么呢?我已经尝试使用各种CAST语句,但无法得到一个值插入到col 3中。我需要该值显示为如上所示的连接。
任何帮助都将不胜感激。

ecr0jaav

ecr0jaav1#

将所有类型转换 Package 为最终的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;
2izufjch

2izufjch2#

根据小整数的MAXIMUM值,可以将它们转换为以9为基数的整数,然后与“9”连接。

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

和另一个选项,也取决于你的小整数的MAXIMUM值,以填补左零其中之一。

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

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

相关问题