我必须拥有join
字段的表,但它们不匹配数据类型。一个是String,一个是Decimal。
当我使用pyodbc sql查询选择它们时,我可以使用以下命令让它们返回相同的结果:
int(trim(imus15))
int(substr(cmcsno, 1, 6))
但是,当我运行此连接时出现以下错误:
[DB2 for i5/OS]SQL0802 - Data conversion or data mapping error. (-802)
我试过了:
CAST(TRIM(IMUS15 AS INTEGER)) = int(substr(cmcsno, 1, 6))
我无法确定如何加入这两个字段。
IMUS15会= '112303 '
CMCSNO = 112303
答案 0 :(得分:3)
表格中某处的IMUS15
字段中存在非数字值。
最快的解决方案是明确的字符比较:
JOIN TABLE2 ON IMUS15 = CHAR(CMCSNO)
例如:
WITH TABLE1 AS (SELECT '112303 ' IMUS15 FROM SYSIBM.SYSDUMMY1),
TABLE2 AS (SELECT 112303 CMCSNO FROM SYSIBM.SYSDUMMY1)
SELECT * FROM TABLE1
JOIN TABLE2 ON IMUS15 = CHAR(CMCSNO)
答案 1 :(得分:1)
我做了一些测试来重现您的问题(我猜测IMUS15
和CMCSNO
的定义):
create table jmmlib.table1
(imus15 char(15),
data1 char(25));
create table jmmlib.table2
(cmcsno dec(6,0),
data1 char(25));
insert into jmmlib.table1
values ('123456', 'test key 1'),
('1123a', 'non-numeric key'),
('555', 'short key');
insert into jmmlib.table2
values (123456, 'numeric key 1'),
(1123, 'no valid match'),
(555, 'short numeric key');
select *
from jmmlib.table1
full outer join jmmlib.table2 on imus15 = char(cmcsno);
结果是:
IMUS15 DATA1 CMCUSNO DATA1
-------------- ---------------- -------- -----------------
123456 test key 1 123,456 numeric key 1
1123a non-numeric key <null> <null>
555 short key 555 short numeric key
<null> <null> 1,123 no valid match
注意,您需要做的就是将CMCSNO转换为角色,不需要其他旋转。
产生SQL0802的方法 - 数据转换或数据映射错误:
join on imus15 = cmcsno
join on trim(imus15) = cmcsno
join on dec(imus15,6,0) = cmcsno
在所有这些中,转换(隐式或显式)是imus15 to decimal
,其中非数字键导致SQL0802。