
select * from esign_contract where task_item_id in ('1635,1636') 这个 sql 为什么能且只能匹配出 task_item_id = 1635 的记录。按我理解'1635,1636'是一个完整的字符串,不应该匹配出 1635 的记录。另外如果 in 关键字会对字符串中有',' (尝试了使用中文逗号,或符号,空格都会有这个效果)做拆分的话,那么也应该匹配出 1636 的结果,但是并没有匹配出来 1636 的结果
版本是 5.7.38-220701-log
1 cheng6563 2023-08-29 13:47:04 +08:00 你 task_item_id 是不是数字类型。。。 |
3 hidemyself 2023-08-29 13:49:13 +08:00 我猜,应该是自动类型转换了。 '1635,1636' 被转换成了 1635 |
4 setsunakute 2023-08-29 13:49:36 +08:00 对于你这种场景,你应该用 find_in_set ,而不是 in |
5 F281M6Dh8DXpD1g2 2023-08-29 13:51:05 +08:00 @Dlin 人家都告诉你了,你猜'1635,1636'转成数字类型出来的是啥 |
6 8355 2023-08-29 13:55:08 +08:00 mysql 隐式转换 https://dev.mysql.com/doc/refman/8.0/en/type-conversion.html SELECT CAST('78,55' AS UNSIGNED) task_item_id 是 int 类型 传入的是字符串类型所以会将字符串转为 int |
7 Dlin OP |