Сразу уточню нормальное решение - заменит ISNULL на ifnull , а статья просто демонстрация создания и использования хранимых процедур в MySql.
Итак, столкнулся с тем, что ISNULL для MS sql, в отличии от версии MySql получает на вход 2 значения. (Первое - что проверяем, второе - возвращаемое значение, если первый аргумент NULL)
Для Решения задачи написал процедуру:
DROP PROCEDURE `myIsnull` ;
CREATE DEFINER = `root`@`localhost` PROCEDURE `myIsnull` ( IN `a` INT( 11 ) , IN `b` INT( 11 ) ) NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER SELECT IF( ISNULL( a )
OR a =0, b, a ) AS ret
- проблема: вызывать ее нужно используя CALL, а он не везде поддерживается.
Пример не работающего кода:
SET @pWeight =1;
SELECT
CASE
WHEN @pWeight > call myIsnull(10,0)
THEN 'is twenty'
ELSE 'is older than 22'
END AS WeightCost
Возможное решение - сделать не процедуру, а функцию, вариант не тестировался