[英]db2 sql query - joins between char and decimal
我正在尝试通过 aqt 编辑器对 2 个 DB2 表执行左外连接 sql 查询。 加入在 char 和 decimal 字段之间发生。
对于我提供的 where 子句,char 和 decimal 字段始终只包含 19 位数字 - 没有字符或小数。
尝试将 char 转换为十进制的强制转换函数,因此连接可以发生 b/w 2个十进制字段,还尝试将 char 和 decimal 转换为 integer 。 一直收到如下错误:
游标未处于准备状态,算术溢出
发生其他算术异常。
这是一个相当大的查询-这是发生错误的行-
left outer join aTable on cast(aTable.charField AS Decimal(19,0)) = bTable.decimalField
bTable.decimalField 是 Decimal 类型,长度为 19
aTable.charField 是长度为 30 的 Char 类型。
始终可以将 DECIMAL 转换为 CHAR,但并不总是可以将 CHAR 转换为 DECIMAL。 我建议您尝试第一个选项而不是第二个选项(您正在使用)。 当然,除非您确定数据处于完美、原始状态。
例如,您可以将您的加入重新表述为:
left outer join aTable on aTable.charField = '' || bTable.decimalField
上面的示例使用从数字到字符值的最简单呈现。 最终,确切的渲染应考虑以下方面:
您需要相应地调整渲染。
最后一点:转换策略(从左到右,或从右到左)极大地影响了引擎的优化选项。 如果您进行更改,您最终可能会得到更快或更慢的查询。 无论如何,您最终都会得到正确的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.