MySQL, Concat int и сохранить в veriable и использовать переменную с «IN» или «NOT IN» - PullRequest
0 голосов
/ 05 ноября 2019

Я хочу CONCAT значение в столбце ID в строковой переменной и использовать переменную с IN в SQL, как показано ниже:

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

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

Возвращает запись, имеющую ID = 5, и игнорирует запись, имеющую ID = 15.

1 Ответ

0 голосов
/ 05 ноября 2019

@ActID - это строковый литерал списка через запятую, а не список значений. Таким образом, список в скобках оператора IN содержит только 1 значение: '5,15'

  • при сравнении 5 с '5,15' результат равен TRUE
  • при сравнении 15 с '5,15' результат равен FALSE

, поскольку '5,15' преобразуется в целочисленное значение 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. См. Упрощенную демоверсию . Примечание: SET @ActID = CONCAT(5,',',15); работает нормально.

...