UNION ALL操作后字符串值被截断问题咨询
EAN值在UNION ALL后被截断的原因
这个异常的核心原因是UNION ALL会以第一个查询返回的列数据类型作为整个结果集的统一类型,具体到你的场景:
- 你的查询中第一个SELECT语句对应的
tbl_stock_tracker_2022表,其EAN列实际存储类型并非字符串,而是数值类型(比如DECIMAL/NUMERIC,且精度不足以容纳12位的完整EAN值)。 - 第三个表
tbl_qogita_data_dump_2022_v2(即你所说的表B)的EAN是字符串类型,执行UNION ALL时,字符串类型的EAN会被强制转换为第一个查询定义的数值类型。 - 受数值类型的精度限制,12位的EAN字符串(如
666151010628)在转换时会被截断或取整,最终呈现为666151000000这类截断后的数值。
你可以通过两个方式验证这个结论:
- 单独查询
tbl_stock_tracker_2022的EAN列,查看其实际存储类型; - 在第三个SELECT语句中显式将EAN转为字符串,比如替换原
SELECT *为明确列并转换EAN:SELECT Year, Week, ..., CAST(EAN AS STRING), ...,如果结果不再出现截断,即可确认问题根源。
内容的提问来源于stack exchange,提问作者user20777937
相关产品推荐
相关产品推荐

