在MySQL中是否可以在表中搜索列只包含1个逗号的位置?

时间:2017-11-14 17:49:06

标签: mysql sql

我在一个以逗号分隔的表中使用此列来分隔值。

以下是样本数据:

2003,2004
2003,2005
2003,2006
2003,2004,2005
2003,2007

我想获取仅包含1个逗号的所有数据。

我一直在玩'%'和'_'通配符,但我似乎无法得到我需要的结果。

SELECT column FROM table WHERE column like '%_,%'

3 个答案:

答案 0 :(得分:4)

,替换为''空集,然后将原始长度减去替换长度。如果1,那么只有1个逗号,如果> 1然后超过1个逗号。

长度差异代表逗号的数量。

Length(column) - length(Replace(column,',','')) as NumOfCommas

where Length(column) - length(Replace(column,',','')) =1

虽然这可以解决问题,但我同意其他人的意见。在RDBMS中的单个列中存储多个值会带来更多麻烦。最好将数据标准化并使其达到至少第3范式!

答案 1 :(得分:3)

您还可以使用find_in_set()方法搜索逗号分隔列表中的值,方法是使用substring_index选择列的最后一个值,然后我们可以检查find_in_set的结果应为2它是列表中的第二个和最后一个值

select *
from demo
where find_in_set(substring_index(data,',',-1),data) = 2

Demo

答案 2 :(得分:0)

也许另一种解决方案是在你的情况下使用正则表达式,它看起来像^[0-9]{4},[0-9]{4}$

SELECT * FROM MyTable WHERE ColName REGEXP '^[0-9]{4},[0-9]{4}$'

或者如果你想要所有非逗号一次或多次:

SELECT * FROM MyTable WHERE ColName REGEXP '^[^,]*,[^,]*$'