SQL Join时为何发生隐式CAST转换?如何解决字符串关联问题
问题解决方法与原因解析
一、直接解决方法
把WHERE子句中的&替换成SQL标准的逻辑与运算符AND即可,这是触发错误的核心原因。正确的查询语句如下:
SELECT T1.t1c1, T1.t1c2, T1.t1c3, T2.t2c1, T2.t2c2, T2.t2c3, T2.t2c4 FROM T1, T2 WHERE T1.t1c1 = T2.t2c1 AND T1.t1c2 = T2.t2c2;
修改后即可直接以String类型完成等值关联,不会触发任何不必要的类型转换。
二、隐式转换的原因
你原始查询里的&在SQL中被解析为按位与运算符,而非逻辑与连接符。按位与运算仅支持整数、长整数等整型数值类型,不支持字符串或浮点型。
数据库执行按位与运算前,会自动触发隐式类型转换:尝试把参与运算的String类型字段转换为数值类型(这里转为DOUBLE),但DOUBLE属于浮点型,不符合按位与对整型的要求,因此抛出AnalysisException错误。
哪怕你尝试显式转换为String,只要&运算符存在,数据库仍会优先按照按位与的规则,再次把String转成DOUBLE去执行运算,所以依然报错。
内容的提问来源于stack exchange,提问作者Debtanu Gupta
相关产品推荐
相关产品推荐

