MYSQL - 解析逗号分隔的数字字符串并将每个数字与设置的数字进行比较

标签 mysql sql stored-procedures

我在 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/

相关文章:

mysql - 查询根据其他列的组合查找电话号码?

sql - 存储过程不显示数据库中的代码

tsql - Entity Framework 4 : The selected stored procedure returns no columns

MYSQL 语法错误,意外的 IDENT_QUOTED,期望 $end

php - 如何使用 PHP 将多维数组存储到 mysql 中

python - MySQL 命令与 Python 不同步

mysql - 基于部分字符串值限制 MYSQL 查询的结果

MySQL 看不到数据库

SQL - 选择下一个日期查询

mysql - 为 MySQL 数据库中的长 varchar 字段强制执行唯一值