【问题标题】:MySQL, Concat int and save to veriable and use variable with 'IN' or 'NOT IN'MySQL,Concat int 并保存到变量并使用带有“IN”或“NOT IN”的变量
【发布时间】:2019-11-05 16:26:45
【问题描述】:

我想在字符串变量的ID 列中连接值,并在 SQL 中使用带有 IN 的变量,如下所示:

SET @ActID = CONCAT(CAST(5 AS CHAR),',',CAST(15 AS CHAR));

SELECT * FROM `accounts` WHERE `ID` IN (@ActID);

它返回 ID = 5 的记录并忽略 ID = 15 的记录。

【问题讨论】:

  • 在我看来你在使用无效类型时信任 mysql 自动数据类型转换,停止这样做..
  • 这个should work。你有什么问题?
  • 我先尝试了没有强制转换,但结果和现在一样。在某处我注意到铸造解决了问题,因此我尝试了。
  • GMB,我需要游标中的两条记录进行处理。 Select SQL 没有表名。如果我在其中添加表名,它会返回所有记录。

标签: mysql sql concat


【解决方案1】:

@ActID 是逗号分隔的列表字符串文字,而不是值列表。
因此IN 运算符括号内的列表仅包含 1 个值:'5,15'

  • 当您将5'5,15' 进行比较时,结果为TRUE
  • 当您比较 15'5,15' 时,结果是 FALSE

因为'5,15'根据here描述的规则转换为整数值5
你要的是函数FIND_IN_SET()

SET @ActID = CONCAT(CAST(5 AS CHAR),',',CAST(15 AS CHAR));
SELECT * FROM `accounts` WHERE FIND_IN_SET(`ID`,@ActID) > 0;

更改为 ...= 0 相当于 NOT IN
查看简化的demo

注意:SET @ActID = CONCAT(5,',',15); 工作正常。

【讨论】:

    猜你喜欢
    • 2012-08-11
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 2013-03-10
    • 2019-08-10
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    相关资源
    最近更新 更多