繁体   English   中英

db2 sql 查询 - 字符和十进制之间的连接

[英]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 。 一直收到如下错误:

  1. 游标未处于准备状态,算术溢出

  2. 发生其他算术异常。

这是一个相当大的查询-这是发生错误的行-

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM