Oracle/SQL/MySQL查询无需存储过程如何生成自定义列?
问题解答
完全可以实现,无需借助存储过程,直接在SELECT查询中通过内置函数或条件语句即可生成目标自定义列,以下是几种常见实现方式:
- 方法1:使用通用标准SQL函数
COALESCE(所有主流SQL数据库、Oracle均支持)
该函数会返回参数列表中第一个非NULL的值,完全匹配你的需求,写法最简,兼容性最好,后续迁移数据库也无需调整语法:
SELECT -- 此处补充你需要查询的其他字段 COALESCE(Actual_Completion_Date, Schedule_Completion_Date) AS Completion_Date FROM 你的业务表名;
- 方法2:使用
CASE条件语句(全场景通用,可扩展复杂判断逻辑)
如果后续需要新增更多判断规则,可以用通用CASE语句实现:
SELECT -- 此处补充你需要查询的其他字段 CASE WHEN Actual_Completion_Date IS NOT NULL THEN Actual_Completion_Date ELSE Schedule_Completion_Date END AS Completion_Date FROM 你的业务表名;
- 方法3:Oracle特有简化函数
NVL
如果确定仅在Oracle环境运行,可以用Oracle原生的NVL函数,功能和双参数的COALESCE完全一致:
SELECT -- 此处补充你需要查询的其他字段 NVL(Actual_Completion_Date, Schedule_Completion_Date) AS Completion_Date FROM 你的业务表名;
注意:如果两个日期字段的存储格式存在差异,建议先统一格式后再做合并,避免出现隐式转换报错。
内容的提问来源于stack exchange,提问作者Wanna Coffee
相关产品推荐
相关产品推荐

