gpt4 book ai didi

mysql - 为什么mysql过程中的if语句无法得到正确的逻辑查询?

转载 作者:行者123 更新时间:2023-11-29 09:32:20 25 4
gpt4 key购买 nike

查询年份为18时的所有数据:

SELECT * from tb where year=18 //
+----+------+------+------+
| id | name | year | num |
+----+------+------+------+
| 2 | a | 18 | 400 |
| 4 | b | 18 | 200 |
| 6 | c | 18 | 100 |
+----+------+------+------+

现在我写了一个mysql程序:

create procedure show_data(in type char,myear int)
begin
if type = "all" then
SELECT * from tb where year=myear;
elseif type != "all" then
SELECT * from tb where name=type and year=myear;
end if;
end //

程序show_data中的逻辑很清晰:当输入参数type为all,并且myear为18时,查询只是按照程序SELECT * from tb whereyear=18

我通过call show_data("all",18)得到的结果如下:

call show_data("all",18)//
+----+------+------+------+
| id | name | year | num |
+----+------+------+------+
| 2 | a | 18 | 400 |
+----+------+------+------+
1 row in set (0.00 sec)

Query OK, 0 rows affected, 1 warning (0.00 sec)

show warnings//
+---------+------+-------------------------------------------+
| Level | Code | Message |
+---------+------+-------------------------------------------+
| Warning | 1265 | Data truncated for column 'type' at row 1 |
+---------+------+-------------------------------------------+
1 row in set (0.00 sec)

最佳答案

您将变量type声明为char。这仅允许单个字符。因此,当您尝试分配包含三个字符的字符串 ('all') 时,会出现错误。

考虑this example :

delimiter //
create procedure debug_char(in type char, myear int)
begin
select type;
end
//

call debug_char('abc', 1);

产量:

Error: ER_DATA_TOO_LONG: Data too long for column 'type' at row 1

您需要将数据类型更改为 char(3) 以便该值可以容纳在其中(您实际上需要与列 name 中相同的最大字符长度,如果超过 3)。

注意:可以通过将逻辑移至查询本身而不是使用 if 来简化代码,如下所示:

delimiter //
create procedure debug_char(in type char(3), myear int)
begin
select * from tb where (name = type or type = 'all') and year = myear;
end
//

关于mysql - 为什么mysql过程中的if语句无法得到正确的逻辑查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58429742/

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