我在一个以逗号分隔的表中使用此列来分隔值。
以下是样本数据:
2003,2004
2003,2005
2003,2006
2003,2004,2005
2003,2007
我想获取仅包含1个逗号的所有数据。
我一直在玩'%'和'_'通配符,但我似乎无法得到我需要的结果。
SELECT column FROM table WHERE column like '%_,%'
答案 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
答案 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 '^[^,]*,[^,]*$'