2021-04-14 04:20:44
Oracle中的COALESCE函数是一个用于处理缺失值的有效工具,其核心功能是返回参数列表中第一个非空值。以下是详细用法说明:
基本语法COALESCE(expr1, expr2, ..., exprN)处理缺失值当数据列可能为NULL时,用COALESCE提供默认值:
SELECT COALESCE(name, 'Unknown') AS customer_name FROM customers;若name为NULL,返回'Unknown'。
多列优先级选择从多个列中选取第一个非空值:
SELECT COALESCE(phone, mobile, home_phone, 'No contact') FROM contacts;依次检查phone、mobile、home_phone,返回第一个非空值;若全为空,返回'No contact'。
计算字段中的默认值在计算时避免NULL影响结果:
SELECT product_name, price * COALESCE(discount, 1) AS final_price FROM products;若discount为NULL,默认按1(无折扣)计算。
参数顺序敏感函数按参数顺序检查,第一个非空值即返回。例如:
COALESCE(NULL, NULL, 'A', 'B') -- 返回 'A'与NVL的区别
NVL(expr1, expr2)仅支持两个参数,而COALESCE支持多个。
COALESCE是SQL标准函数,兼容性更广。
性能优化在复杂查询中,COALESCE可能影响索引使用,需结合实际场景测试。
结合CASE语句实现更复杂的逻辑:
SELECT COALESCE( CASE WHEN status = 'ACTIVE' THEN start_date END, CURRENT_DATE) AS effective_dateFROM subscriptions;动态默认值使用子查询或函数作为参数:
SELECT COALESCE(manager_id, (SELECT default_manager FROM config)) FROM employees;通过灵活运用COALESCE,能有效避免NULL值导致的逻辑错误,使SQL更健壮。