Oracle SQL中能否对不同数据类型的两列执行UNION操作?
Oracle SQL不同数据类型列的UNION操作问题
核心结论
Oracle SQL的UNION操作要求对应列的数据类型必须兼容——只要能通过隐式或显式转换统一为同一数据类型,就可以执行UNION,但如果转换过程中存在非法数据,就会抛出错误。
你的报错原因
你执行语句时出现invalid number错误,是因为CUST_NAME(VARCHAR2类型)中存在无法转换为数字的内容,导致TO_NUMBER(CUST_NAME)转换失败。
解决办法
过滤合法数字格式的记录后转换
先用正则表达式筛选出CUST_NAME中符合数字格式的记录,再执行转换和UNION:SELECT EMP_ID FROM EMPLOYEE UNION SELECT TO_NUMBER(CUST_NAME) FROM CUSTOMER WHERE REGEXP_LIKE(CUST_NAME, '^[0-9]+(\.[0-9]+)?$');处理转换失败的记录(Oracle 12c+)
使用TO_NUMBER的DEFAULT ... ON CONVERSION ERROR语法,将无法转换的内容转为NULL或指定值:SELECT EMP_ID FROM EMPLOYEE UNION SELECT TO_NUMBER(CUST_NAME DEFAULT NULL ON CONVERSION ERROR) FROM CUSTOMER;统一转为字符串类型
如果不需要对结果进行数值运算,可以把NUMBER类型的EMP_ID转为VARCHAR2,避免转换失败:SELECT TO_CHAR(EMP_ID) FROM EMPLOYEE UNION SELECT CUST_NAME FROM CUSTOMER;
内容的提问来源于stack exchange,提问作者user21257954
相关产品推荐
相关产品推荐

