gpt4 book ai didi

mysql - 为什么 num IN ("num1,num2") 在第一个逗号的顶部?

转载 作者:行者123 更新时间:2023-11-29 01:13:20 26 4
gpt4 key购买 nike

这是我的伪查询:

SELECT col1, col2 FROM table WHERE number IN(number1,number2,number3);

示例

SELECT name, description FROM products WHERE 5 IN(category_id);

注意:假设表中的其中一行有 category_id = 2,5,7

问题

如果该行在逗号分隔集的开头有“5”,则我的查询有效:5,2,7但是如果行以 5 以外的任何其他内容开头,则相同的查询不会返回任何结果。

我尝试了各种方案,在我看来,当 mysql 遇到逗号时,它不再进一步检查以逗号分隔的数字中的匹配项。

我检查了所有有意义的内容,例如格式正确的逗号分隔字符串和排序规则。在这一点上我很困惑。有什么解决办法吗?

请注意,我使用了 FIND_IN_SET() 并且工作完美。但是,我仍然不满足于在不知道真正的问题是什么的情况下放弃 IN()。为什么它在第一次遇到逗号时停止。

最佳答案

Why does it work on the first value only?

为了将字符串值与数字列进行比较,mysql 将单个字符串值转换为单个数字。当 mysql 将字符串转换为数字时,它会丢弃从第一个非数字字符开始的所有内容,例如:

  • "1234,5678" --> 1234
  • "abc5678" --> 0

这就是为什么只有 第一个 数字有效。

如果您将字符串值更改为字符串值列表,它将起作用:

 SELECT name, description FROM products WHERE 5 IN ('2', '5', '7');

关于mysql - 为什么 num IN ("num1,num2") 在第一个逗号的顶部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26091549/

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