如何使用原始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,... |
+-----------------------------------+
- 返回第一个参数在第二个参数中的索引位置
是否为非空。@PM77-1谢谢,是否为非空
有效。