在MySQL中,是否可以搜索一个列仅包含1个逗号的表?

在MySQL中,是否可以搜索一个列仅包含1个逗号的表?,mysql,sql,Mysql,Sql,我在一个以逗号分隔的表中有这个列,用于分隔值 以下是示例数据: 2003,2004 2003,2005 2003,2006 2003,2004,2005 2003,2007 我想获取所有只包含1个逗号的数据 我一直在玩弄“%”和“u”通配符,但似乎无法得到所需的结果 从表中选择列,其中列“%”、%%将、替换为'空集,然后取原始长度减去替换的长度。如果1,则只有1个逗号如果>1,则超过1个逗号 长度差表示逗号的数量 Length(column)-长度(替换(column,','')为numof逗

我在一个以逗号分隔的表中有这个列,用于分隔值

以下是示例数据:

2003,2004
2003,2005
2003,2006
2003,2004,2005
2003,2007
我想获取所有只包含1个逗号的数据

我一直在玩弄“%”和“u”通配符,但似乎无法得到所需的结果


从表中选择列,其中列“%”、%%

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

长度差表示逗号的数量

Length(column)-长度(替换(column,','')为numof逗号


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

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

长度差表示逗号的数量

Length(column)-长度(替换(column,','')为numof逗号


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

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

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

您也可以使用
find_in_set()
方法在逗号分隔的列表中搜索值,通过使用
substring_index
拾取列的最后一个值,然后我们可以检查
find_in_set
的结果是否应为2,以便它是列表中的第二个和最后一个值

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

也许另一种解决方案是在您的案例中使用正则表达式,它可能看起来像这样
^[0-9]{4},[0-9]{4}$

SELECT * FROM MyTable WHERE ColName REGEXP '^[0-9]{4},[0-9]{4}$'
或者,如果希望一次或多次使用所有非逗号:

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

也许另一个解决方案是在您的案例中使用正则表达式,它可能看起来像这样
^[0-9]{4},[0-9]{4}$

SELECT * FROM MyTable WHERE ColName REGEXP '^[0-9]{4},[0-9]{4}$'
或者,如果希望一次或多次使用所有非逗号:

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

替换为
'
空集,然后取原始长度减去替换长度。如果1,则只有1个逗号如果>1,则超过1个逗号。长度差表示逗号的数量<代码>长度(列)-长度(替换(列',','')为numof逗号或
其中长度(列)-长度(替换(列',',''))=1
请使用适当的标记。并且不要在数据库表中使用“逗号分隔值”。什么应该是简单连接现在成为一个主要问题如果您引用这些值使它们看起来像JSON数组,并使用JSON函数查找只有两个的数组,那么您可能能够处理这个问题items@xQbert .. 你为什么不把它作为一个答案发布呢?xQbert hi伙计,非常感谢你的答案!我将搜索数以百万计的数据,这就是为什么我试图减少循环的时间,并试图通过数据库找出答案,只是为了在可能的情况下节省时间。将
替换为
空集,然后取原始长度减去替换的长度。如果1,则只有1个逗号如果>1,则超过1个逗号。长度差表示逗号的数量<代码>长度(列)-长度(替换(列',','')为numof逗号或
其中长度(列)-长度(替换(列',',''))=1
请使用适当的标记。并且不要在数据库表中使用“逗号分隔值”。什么应该是简单连接现在成为一个主要问题如果您引用这些值使它们看起来像JSON数组,并使用JSON函数查找只有两个的数组,那么您可能能够处理这个问题items@xQbert .. 你为什么不把它作为一个答案发布呢?xQbert hi伙计,非常感谢你的答案!我将搜索数以百万计的数据,这就是为什么我试图减少循环的时间,并试图通过数据库找出答案,只是为了在可能的情况下节省时间..我喜欢它!你好谢谢你的回答!我将尝试检查哪一个检索数据的速度更快。谢谢你们两位!我喜欢它!你好谢谢你的回答!我将尝试检查哪一个检索数据的速度更快。谢谢你们两位!