Oracle SQL拆分尺寸列(如12'x16')计算平方英尺的代码纠错请求
原SQL核心问题定位
- 字段名拼写错误:宽度值提取逻辑中误将
size_name写为siz_ename,导致函数无法正确取值 - 分隔符匹配错误:实际尺寸的长宽分隔符为
x(示例格式12'x16'),原代码错误匹配乘号*作为分隔位置,取值逻辑完全偏离实际数据格式 - 分组逻辑冗余:将派生计算字段
square_feet_Area纳入GROUP BY子句,无业务意义且增加查询开销 - 异常容错缺失:遇到格式不符合「数值'x数值'」的脏数据时,截取的空值会直接触发
TO_NUMBER类型转换报错
修正后可直接运行的SQL
SELECT -- 提取长度:第一个单引号前的数值 TO_NUMBER(SUBSTR(size_name, 1, INSTR(size_name, '''') - 1)) * -- 提取宽度:x分隔符后、第二个单引号前的数值 TO_NUMBER(SUBSTR( size_name, INSTR(size_name, 'x') + 1, INSTR(size_name, '''', 1, 2) - INSTR(size_name, 'x') - 1 )) AS square_feet_Area, size_name, asin FROM 你的业务表名 -- 替换为实际存储尺寸数据的表名 WHERE asin IN ( 'B01DZZ3TZ4', 'B01MS3QHR9', 'B01N3095SX', 'B084KGNGRB' ) GROUP BY asin, size_name
适配优化提示:
- 若数据中分隔符存在大小写差异(如大写
X),可将分隔符匹配逻辑调整为INSTR(UPPER(size_name), 'X'),自动兼容两种格式- 若需规避脏数据导致的转换报错,可将截取逻辑套入
NULLIF,将空截取结果转为NULL而非抛出错误:例如TO_NUMBER(NULLIF(SUBSTR(...), ''))
内容的提问来源于stack exchange,提问作者Zabzee
相关产品推荐
相关产品推荐

