coalesce 函数

本文介绍了COALESCE函数在数据库中的使用方法,并通过具体示例演示了如何使用该函数来处理空值和初始化参数。此外,还提供了一套参数初始化规则供读者参考。

  COALESCE函数会依次检查输入的参数,返回第一个不是NULL的参数,只有当传入COALESCE函数的所有的参数都是NULL的时候,函数才会返回NULL。例如, COALESCE(piName,''),如果变量piName为NULL,那么函数会返回'',否则就会返回piName本身的值。

  下面的例子展示了如何对参数进行检查何初始化。

  Person表用来存储个人的基本信息,其定义如下:

  表1: Person

  

  下面是用于向表Person插入数据的存储过程的参数预处理部分代码:

  SET poGenStatus = 0; SET piName = RTRIM(COALESCE(piName, '')); SET piRank = COALESCE(piRank, 0); -- make sure all required input parameters are not null IF ( piNum IS NULL OR piName = '' OR piAge IS NULL ) THEN SET poGenStatus = 34100; RETURN poGenStatus; END IF;

  表Person中num、name和age都是非空字段。对于name字段,多个空格我们也认为是空值,所以在进行判断前我们调用RTRIM和COALESCE对其进行处理,然后使用 piName = '',对其进行非空判断;对于Rank字段,我们希望如果用户输入的NULL,我们把它设置成"0",对其我们也使用COALESCE进行初始化;对于"Age"和"Num" 我们直接使用 IS NULL进行非空判断就可以了。

  如果输入参数没有通过非空判断,我们就对输出参数poGenStatus设置一个确定的值(例子中为 34100)告知调用者:输入参数错误。

  下面是对参数初始化规则的一个总结,供大家参考:

  1. 输入参数为字符类型,且允许为空的,可以使用COALESCE(inputParameter,'')把NULL转换成'';

  2. 输入类型为整型,且允许为空的,可以使用COALESCE(inputParameter,0),把空转换成0;

  3. 输入参数为字符类型,且是非空非空格的,可以使用COALESCE(inputParameter,'')把NULL转换成'',然后判断函数返回值是否为'';

  4. 输入类型为整型,且是非空的,不需要使用COALESCE函数,直接使用IS NULL进行非空判断

 

[摘自]http://blog.163.com/liuqiuliang_yss.popo/blog/static/45816910200892835348808/

转载于:https://www.cnblogs.com/taotaonwsuaf/archive/2012/12/29/2839162.html

COALESCE 函数是标准的 SQL 函数,被许多数据库系统支持,像 MySQL、PostgreSQL、SQLite、SQL Server、Oracle 等都实现了该函数,尽管各数据库实现和性能可能略有不同,但其核心功能和语法基本保持一致[^1]。 COALESCE 函数用于返回参数列表中第一个非 NULL 的值,常用于处理可能存在 NULL 值的场景,并提供默认值或备用值。其语法为 `COALESCE(expression1, expression2, ..., expressionN)`,其中 `expression1, expression2, ..., expressionN` 是一组表达式,按从左到右的顺序依次评估,函数返回第一个非 NULL 的值,如果所有表达式均为 NULL,则返回 NULL[^2]。 COALESCE 函数常见用途如下: - 替换 NULL 值:用默认值代替可能为 NULL 的字段值。 - 多列优先级:从多个列中选择优先级最高且非 NULL 的值。 - 简化嵌套逻辑:替代复杂的 CASE 表达式。 - 条件判断:在某些复杂的查询条件中,使用 COALESCE 来处理可能的 NULL 值,以确保逻辑的正确性。例如 `SELECT * FROM orders WHERE COALESCE(delivery_date, order_date) > '2024-07-01';` [^2][^3]。 以下是一个在 MySQL 中替换 NULL 值的示例: ```sql -- 假设存在一个表 employees,有 name 和 nickname 列,nickname 可能为 NULL CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(50), nickname VARCHAR(50) ); INSERT INTO employees (id, name, nickname) VALUES (1, 'John', 'Johnny'), (2, 'Jane', NULL); -- 使用 COALESCE 函数,若 nickname 为 NULL,则显示 name SELECT id, COALESCE(nickname, name) AS display_name FROM employees; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值