MySQL过滤范围内的分隔项列表的列
我希望以以下方式筛选表中包含列的项:MySQL过滤范围内的分隔项列表的列,mysql,Mysql,我希望以以下方式筛选表中包含列的项: 3|7|2|10|11 我只希望得到包含特定范围的结果,如: [0 - 10] return result for 3|7|2|10|9 [0 - 10] don't return result for 13|7|2|10|9 未定义分隔项的长度。首先,Juergen D.是绝对正确的:您首先在一个列中引入多个值,从而限制了数据库 也就是说,除了简单的讲课之外,我还想在短期内提供帮助。:)我们开始吧 我们将使用优秀的,如下所示: CREATE FUNC
3|7|2|10|11
我只希望得到包含特定范围的结果,如:
[0 - 10] return result for 3|7|2|10|9
[0 - 10] don't return result for 13|7|2|10|9
未定义分隔项的长度。首先,Juergen D.是绝对正确的:您首先在一个列中引入多个值,从而限制了数据库 也就是说,除了简单的讲课之外,我还想在短期内提供帮助。:)我们开始吧
我们将使用优秀的,如下所示:
CREATE FUNCTION SPLIT_STR(
x VARCHAR(255),
delim VARCHAR(12),
pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
delim, '');
现在,我编写了另一个函数,该函数将遍历表中每个字符串的分隔值,同时调用SPLIT_STR()
,并检查每个值是否低于指定的最小值(示例中为0
),或高于最大值(示例中为10
):
它获取给定字符串x
中标记或分隔值的总数。这告诉我们while循环要循环多少次
set val = split_str(x, delim, pos);
这将获取每个令牌的实际值(在您的示例中:3、7、2、10、9,用于第一条记录)
如果我们得到返回true
,这意味着每个值都通过了测试,并且记录总体上符合您的标准
因此,对于最小值为0,最大值为10的检查示例,您可以调用如下内容:
select str, check_vals(str,'|',0,10) `result` from t;
那会让你
| str | result |
|-------------|--------|
| 3|7|2|10|9 | true |
| 13|7|2|10|9 | false |
切勿在一列中存储多个值!好帖子。。。谢谢大家!最后,我在一个新表中分隔了我的值。。。
IF val < mini or val > maxi THEN
return false;
END IF;
END WHILE;
RETURN true;
select str, check_vals(str,'|',0,10) `result` from t;
| str | result |
|-------------|--------|
| 3|7|2|10|9 | true |
| 13|7|2|10|9 | false |