如何使用原始SQL确定MySQL中csv格式的字段中是否包含特定值?

如何使用原始SQL确定MySQL中csv格式的字段中是否包含特定值?,mysql,sql,Mysql,Sql,tbl中的specifiid字段,值如下: 5289056518530345396834830301883113130934403403140938334377184065426662390162602250740 这些是csv格式,如何使用原始SQL来计算,这个记录是否包含52890,所以如果它包含,用SQL将其输出,如果不包含,我不想在结果中用SQL输出 如何做到这一点 我可以使用PHP来实现这一点,但它有一个分页问题,我必须使页面大小正确,因此在我对其进行sql查询时必须执行此操作,仅供参

tbl
中的
specifiid
字段,值如下:

5289056518530345396834830301883113130934403403140938334377184065426662390162602250740

这些是csv格式,如何使用原始SQL来计算,这个记录是否包含
52890
,所以如果它包含,用SQL将其输出,如果不包含,我不想在结果中用SQL输出

如何做到这一点

我可以使用PHP来实现这一点,但它有一个分页问题,我必须使页面大小正确,因此在我对其进行sql查询时必须执行此操作,仅供参考,我使用的PHP代码如下:

if(isset($specificId) && is_numeric($specificId)) {
    foreach($list as $k => $item){
        $specificIdArr = explode(',', $item['specificId']);
        if( !in_array($specificId, $specificIdArr) )
            unset($list[$k]);
    }
}

我尝试过使用
find_in_set()
,它很有效,但有一个小问题,如果此字段为
null
,如何通过使用
find_in_set()

删除结果。您可以使用
find_in_set
函数在CSV列表中搜索特定值。
并使用where子句检查和省略
NULL

示例

drop table if exists so.tbl_so_q23644829;
create table so.tbl_so_q23644829( csv_column varchar(1024) );
insert into so.tbl_so_q23644829 values( '52890,56518,53034,53968,34830,...' );

select * from so.tbl_so_q23644829 
 where find_in_set( '52890', csv_column ) > 0
   and csv_column is not null;
+-----------------------------------+
| csv_column                        |
+-----------------------------------+
| 52890,56518,53034,53968,34830,... |
+-----------------------------------+
请参阅

drop table if exists so.tbl_so_q23644829;
create table so.tbl_so_q23644829( csv_column varchar(1024) );
insert into so.tbl_so_q23644829 values( '52890,56518,53034,53968,34830,...' );

select * from so.tbl_so_q23644829 
 where find_in_set( '52890', csv_column ) > 0
   and csv_column is not null;
+-----------------------------------+
| csv_column                        |
+-----------------------------------+
| 52890,56518,53034,53968,34830,... |
+-----------------------------------+

    • 返回第一个参数在第二个参数中的索引位置

您是否保证“CSV”字段中的所有数字长度相同?@PM77-1否,它们的长度不相同post中有多个建议的解决方案。看一看。您可以先检查
是否为非空。@PM77-1谢谢,
是否为非空
有效。