我在 MySQL 中需要将逗号分隔的数字字符串 ("2000, 2001, 2002, 2003, 2004")
传递到存储过程中并将每个数字与另一个数字进行比较例如2005
。如果任何数字大于或等于我的目标 2005
,我需要执行代码,否则离开循环。我无法弄清楚如何迭代这个逗号分隔的字符串,使用 CAST()
将每个字符串转换为数字,并将其与我的目标数字进行比较。
最佳答案
假设传递到过程中的参数名为 arg_list
...
如果要求确定列表中是否只有某些(除零之外的任何数字)条目大于 2005,
然后我们可以在程序中做这样的事情:
循环迭代器和一些工作区域:
DECLARE i_ INT DEFAULT 0;
DECLARE ls_number VARCHAR(255) DEFAULT '';
DECLARE ls_greatest VARCHAR(255) DEFAULT '';
初始化,获取列表中的第一个数字,列表中的第一个数字是迄今为止最大的:
SET i_ := 1;
SET ls_number := TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( arg_list ,','),',',i),',',-1));
SET ls_greatest := ls_number;
WHILE ls_number > '' DO
-- evaluate as numeric and compare
IF ls_number+0 > ls_greatest+0 THEN
-- the one we just got is the biggest one so far, so keep it
SET ls_greatest := ls_number;
END IF;
-- get next number in list
SET i_ := i_ + 1;
SET ls_number := TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT( arg_list ,','),',',i),',',-1));
END WHILE;
-- ls_greatest now contains the largest number from the list
IF ls_greatest+0 >= 2005 THEN
-- do some code
END IF;
注意:这假设 arg_list 中的列表格式正确,并且不包含虚假逗号,例如如果列表是 '1,2,3,,4,5'
则循环将在处理 3
后退出
关于MYSQL - 解析逗号分隔的数字字符串并将每个数字与设置的数字进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55288965/