SQL新手求助:如何结合Substring、Case、Trim编写嵌套查询
问题解决:按顺序组合Substring、Case与Trim的SQL嵌套查询
你的代码核心问题是逻辑拆分到两个独立SELECT语句中,且存在列名错误、执行顺序未串联的问题。以下是修正后的代码,严格按照Substring提取→Case修正→Trim处理的顺序实现:
修正后代码
-- 第三层:最终Trim并拼接结果 SELECT TRIM(lion_corr) || '_' || TRIM(tiger) || '_' || TRIM(bear_corr) AS new_imp_animal FROM ( -- 第二层:用Case修正提取后的字段 SELECT lioness, tiger, CASE WHEN LENGTH(bear) = 4 THEN bear ELSE CONCAT('0', bear) END AS bear_corr, -- 修正原代码列名错误:原CASE里的`lion`应为`lioness` CASE WHEN LENGTH(lioness) = 7 THEN lioness ELSE CONCAT('0', lioness) END AS lion_corr FROM ( -- 第一层:用Substring提取原始字段 SELECT dt, SUBSTRING_INDEX(SUBSTRING_INDEX(dt, '你的分隔符1', 2), '你的分隔符1', -1) AS lioness, -- 补全实际分隔符与参数 SUBSTRING_INDEX(SUBSTRING_INDEX(dt, '你的分隔符2', 2), '你的分隔符2', -1) AS tiger, -- 补全实际分隔符与参数 SUBSTRING_INDEX(dt, '你的分隔符3', -1) AS bear -- 补全实际分隔符与参数 FROM Animaltab ) AS step1_extract ) AS step2_case_correct;
关键修正说明
- 串联执行顺序:用三层嵌套查询明确步骤,确保上一步的结果传递到下一步,严格遵循你要求的执行顺序。
- 列名统一:修正原CASE语句里的笔误,子查询中提取的列是
lioness,而非lion,需保持名称一致。 - 语句整合:将原本两个独立的SELECT合并为一个嵌套查询,避免无法访问前序结果的问题。
- 方言适配:如果使用MySQL,拼接符
||需替换为CONCAT()函数,写法为CONCAT(TRIM(lion_corr), '_', TRIM(tiger), '_', TRIM(bear_corr))。
内容的提问来源于stack exchange,提问作者confused101
相关产品推荐
相关产品推荐

