MySQL 在标签 LIKE 匹配字符串上返回 true

标签 mysql sql

我在创建 MySQL 脚本时遇到一些问题。

这个想法是将2个变量传递给函数,其中一个是字符串,用于在名称或确定名称列中搜索“LIKE”类型的匹配,传递的第二个变量是整数形式的外键,即旨在匹配表中的 id 列,我正在尝试检查匹配。

长话短说,如果名称或确定名称是“LIKE”传递的字符串,并且确切行的 id 就像参数中传递的外键值,我需要返回 true。存储函数在执行结束时必须返回 true 或 false。

到目前为止我的脚本看起来像这样:

CREATE DEFINER = CURRENT_USER FUNCTION `is_persona`(`searchq` varchar(100),`fk_key` int(11))
RETURNS integer
DETERMINISTIC
BEGIN
SELECT
CASE WHEN name LIKE searchq THEN 1 ELSE 0  END AS 'result',
CASE WHEN surename LIKE searchq THEN 1 ELSE 0 END AS 'result'
FROM personas WHERE id = fk_key;
END;

到目前为止,此脚本返回错误“1415 - 不允许从函数返回结果集”

感谢您的帮助。

最佳答案

该错误是因为您必须将 select 结果分配给变量。您可以尝试如下所示的操作。 相应地使用您的 IF 条件。

CREATE DEFINER = CURRENT_USER FUNCTION is_persona(searchq varchar(100),`fk_key` int(11))
RETURNS varchar(20)
DETERMINISTIC
BEGIN
DECLARE MYOUTPUT1 varchar(20);
DECLARE MYOUTPUT2 varchar(20);
SELECT CASE WHEN name like concat('%',searchq,'%') THEN 1 ELSE 0  END AS 'result',
       CASE WHEN surename like concat('%',searchq,'%')  THEN 1 ELSE 0 END AS 'result'
INTO MYOUTPUT1,MYOUTPUT2 --you are missing this part
FROM personas WHERE id = fk_key;

IF(MYOUTPUT1 =1 && MYOUTPUT2 =1 ) then
RETURN 'TRUE';
ELSE 
RETURN 'FALSE';
END IF;
END;

CHECK DEMO HERE

更新具有 boolean 返回类型的函数

MySQL does not have built-in Boolean type. However, it uses TINYINT(1) instead. To make it more convenient, MySQL provides BOOLEAN or BOOL as the synonym of TINYINT(1).

CREATE DEFINER = CURRENT_USER FUNCTION is_persona(searchq varchar(100),`fk_key` int(11))
RETURNS boolean
DETERMINISTIC
BEGIN
DECLARE MYOUTPUT1 varchar(20);
DECLARE MYOUTPUT2 varchar(20);

SELECT CASE WHEN name like concat('%',searchq,'%') THEN 1 ELSE 0  END AS 'result',
       CASE WHEN surname like concat('%',searchq,'%')  THEN 1 ELSE 0 END AS 'result'
INTO MYOUTPUT1,MYOUTPUT2 
FROM personas WHERE id = fk_key;

RETURN IF((MYOUTPUT1 || MYOUTPUT2),true,false);

END;

DEMO FOR BOOLEAN RETURNING FUNCTION

关于MySQL 在标签 LIKE 匹配字符串上返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59195283/

相关文章:

mysql - MySQL DECLARE 中的 SELECT INTO 变量导致语法错误?

mysql - 如何在mysql命令历史中搜索

sql - SQLite : need a Emulation 中没有分区排名

SQL 在某个日期后获取每个 ID 的最后一条记录

mysql - SQL中查找数据库中所有表的最大值

sql - 如何根据字符串 id 删除 PostgreSQL 数据库中的多行?

mysql - 具有相同结果的两个 SQL 查询,但一个查询快一个数量级

python - 在Django shell中输出MySQL查询结果

c# - 应用程序中的数据库处理

java - Hibernate 不创建我的加入条目