You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL自定义函数仅在匹配单行时返回结果的实现方案

高效实现MySQL自定义函数FindUser:唯一模糊匹配时返回用户ID

可以用单次聚合查询搞定这个需求,不用两次查库或者折腾变量。核心就是在同一条查询里,既统计模糊匹配到的总条数,又拿到唯一匹配时的用户ID,最后通过判断条数是否为1来返回结果。

实现代码

DELIMITER //

CREATE FUNCTION FindUser(p_FirstName NVARCHAR(100), p_LastName NVARCHAR(100))
RETURNS INT
DETERMINISTIC
BEGIN
    DECLARE result_id INT;
    
    SELECT 
        CASE WHEN COUNT(*) = 1 THEN MAX(ID) ELSE NULL END
    INTO result_id
    FROM users
    WHERE FirstName LIKE p_FirstName 
      AND LastName LIKE p_LastName;
    
    RETURN result_id;
END //

DELIMITER ;

关键说明

  • 用COUNT(*)统计模糊匹配的总记录数,MAX(ID)在仅一条匹配时,自然就是该记录的ID(反正只有一个,用MIN或者直接取值效果一致)。
  • 通过CASE语句判断:当匹配行数恰好为1时返回对应ID,否则返回NULL,完全贴合需求。
  • 标记DETERMINISTIC(确定性函数)有助于MySQL优化执行计划,提升查询效率。
  • 函数的两个参数支持标准LIKE模糊匹配语法,比如传入'%Har%'就能匹配名字包含Har的用户。

测试示例

-- 唯一匹配,返回2
SELECT FindUser('Harry', 'Potter');

-- 无匹配结果,返回NULL
SELECT FindUser('Ron', 'Weasley');

-- 新增一条同名前缀记录后,匹配多行,返回NULL
INSERT INTO users (ID, FirstName, LastName) VALUES (4, 'Harry', 'Potter Jr.');
SELECT FindUser('Harry', '%Potter%');

内容的提问来源于stack exchange,提问作者unknown6656

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 07:15:56