gpt4 book ai didi

mysql - MYSQL 中的简单 IF 序列

转载 作者:太空宇宙 更新时间:2023-11-03 11:40:38 25 4
gpt4 key购买 nike

我正在使用 MYSQL 创建一个动态 sql 存储过程。我的问题真的很简单,但几个小时后我无法运行它!如果我弄错了什么,请帮助我。

 DELIMITER //
CREATE PROCEDURE sp_job_list(
IN id VARCHAR(10) CHAR SET utf8,
IN job_title VARCHAR(50) CHAR SET utf8,
IN qualify VARCHAR(50) CHAR SET utf8
)
BEGIN
SET @s = 'SELECT * FROM wp_sho_jobrequirment WHERE 1 = 1 ';
IF job_title <> NULL AND job_title <> ''
THEN
SET @s = CONCAT(@s, ' AND job_title LIKE %', job_title, '%');
END IF;
IF qualify <> NULL AND qualify <> ''
THEN
SET @s = CONCAT(@s, ' AND qualify LIKE %', qualify, '%');
END IF;
IF id <> NULL AND id <> ''
THEN
SET @s = CONCAT(@s, ' AND id =', id);
END IF;

SELECT @s;
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
DELIMITER ;

我认为,我的主要问题是 if 语句,我一开始没有写 THEN END IF 子句,但它无法处理一些编译错误!然后当我把我编译的条款放在一起但没有工作!当我使用此代码调用存储过程时,IF 语句未执行,因此没有任何内容附加到我的动态 sql 查询中:

调用 SP:

SET @p0=''; SET @p1='f'; SET @p2='f'; CALL `sp_job_list`(@p0, @p1, @p2);

结果的动态查询字符串:

SELECT * FROM wp_sho_jobrequirment WHERE 1 = 1

最佳答案

我认为您的结果是由于错误使用了 <> 造成的运算符(operator)反对 NULL .
<>表示 Not equal .您不能直接将其应用于 NULL值(value)观。
而是使用 IS NOTNULL 比较.

声明

IF job_title <> NULL AND job_title <> ''

应该是

IF job_title IS NOT NULL AND job_title <> ''

同样:

改变 IF qualify <> NULL AND qualify <> ''
IF qualify IS NOT NULL AND qualify <> ''

改变 IF id <> NULL AND id <> ''
IF id IS NOT NULL AND id <> ''

引用文档:Not Equal ( <> )

!= (or <>) doesn't see NULL as something that can be compared to and thus doesn't compare itself to those records that have the field marked null.

关于mysql - MYSQL 中的简单 IF 序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42084065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com