mysql - 错误 1292 - 截断了不正确的 DOUBLE 值 :'70,40,77,28,23,72,82,38,29'

标签 mysql

当我像这样执行这个函数时:

enter image description here

这是我定义的函数:

CREATE FUNCTION kyf_getFormationComat(heroSdIds VARCHAR(128), uid VARCHAR(128))
RETURNS INT(11)
BEGIN
    DECLARE comat INT(11);
    SET comat = (SELECT SUM(a.comat) FROM ky_heroinfo a WHERE a.uid = uid AND a.staticdata_id in (heroSdIds));
    RETURN comat;
END

最佳答案

heroSdIds 是一个字符串,因此您不能在 SELECT 查询中使用 IN():

SELECT SUM(a.comat) FROM ky_heroinfo a 
    WHERE a.uid = uid AND a.staticdata_id in (heroSdIds)

状况:

a.staticdata_id in (heroSdIds)

实际上给你:

a.staticdata_id in ("70,40,77,28,23,72,82,38,29") 

请注意引号。它仍然是一个字符串,这里是一个单个值。但为了使其工作,IN() 需要它是用逗号分隔的多个值:

a.staticdata_id in (70,40,77,28,23,72,82,38,29) 

要使其工作,您可以尝试使用字符串函数 FIND_IN_SET()函数而不是 IN()

尝试:

FIND_IN_SET(a.staticdata_id, heroSdIds)

所以整个查询将是:

SELECT SUM(a.comat) FROM ky_heroinfo a 
    WHERE a.uid = uid AND FIND_IN_SET(a.staticdata_id, heroSdIds)

关于mysql - 错误 1292 - 截断了不正确的 DOUBLE 值 :'70,40,77,28,23,72,82,38,29',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37520698/

相关文章:

mysql - 在访问中创建查询以比较字段

Mysqli - 与或

php - Mysql多连接查询记录问题

sql - MySQL 结果为逗号分隔列表

php - Woocommerce WP - 从 post_type = shop_order | 获取 _sku 值SQL查询

mysql - DOUBLE(n, 0) 和 BIGINT(in) MySQL 数据类型之间有什么区别吗?

mysql - 如果我更改字符集,我可以使用 ' instead of ` 来分隔字段吗?

php - 如果我们谈论 InnoDB 中具有唯一索引的表,事务会相互等待还是并行工作?

MySQL ORDER BY 条件第二

mysql - Delphi 5,如何从 MySQL 的 tis620 字段中检索数据?