【Sql】把数据库字段用函数根据逗号分裂成列表,然后判断列表中是否包含目标值

文章讨论了在数据库中处理一对多关系时,如何使用Oracle的INSTR()和MySQL的FIND_IN_SET()函数,通过逗号拆分字段来精确判断集群与库名的绑定。通过添加逗号分隔符并运用这些内置函数,可以提高查询的准确性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【Sql】把数据库字段用函数根据逗号分裂成列表,然后判断列表中是否包含目标值

【1】问题描述

数据库中【库信息db】和【集群信息cluster】是一对多的关系,但是没有将集群信息存成多条,而是把集群名称和集群地址通过逗号拼接,然后存到一个字段里
在这里插入图片描述

现在需要根据集群名称,判断某个集群是否已经和库名SCHEMA_NM绑定了,因为CLUSTER_NM是拼接的字段,所以可以考虑模糊查询like,但是模糊查询匹配的不准确,我们想要确保完整准确的查询到集群名对应的记录

【2】Oracle内置函数解决

可以使用Oracle的内置函数来实现将数据库字段根据逗号分裂成列表,并判断列表中是否包含目标值。以下是一个示例查询:

SELECT
	* 
FROM
	( SELECT CLUSTER_NM, SCHEMA_NM FROM DB_X_CLUSTER WHERE INSTR( ',' || CLUSTER_NM || ',', ',模型集群111,' ) > 0 ) dxc
	LEFT JOIN PROJ_X_DB pxd ON pxd.SCHEMA_NM = dxc.SCHEMA_NM
	LEFT JOIN PROJ_INFO pi ON pxd.PROJ_ID = pi.id 
WHERE
	pi.PROJ_STAT = 0

主要注意的是这一段

SELECT CLUSTER_NM, SCHEMA_NM FROM DB_X_CLUSTER WHERE INSTR( ',' || CLUSTER_NM || ',', ',模型集群111,' ) > 0

(1)‘,’ || CLUSTER_NM || ‘,’:表示给数据库里的字段前后都加上逗号,原来的值也就变成了【,大数据平台集群111,模型集群111,】,这样就方便匹配
(2)‘,模型集群111,’:给要查的目标值的前后也加上逗号
(3)INSTR,判断字符串中是否包含目标值

【3】mysql的内置函数INSTR()

有时,您想要在字符串中查找子字符串或检查字符串中是否存在子字符串。在这种情况下,您可以使用字符串内置INSTR()函数。

INSTR()函数返回字符串中子字符串第一次出现的位置。如果在str中找不到子字符串,则INSTR()函数返回零(0)。

INSTR(str,substr);

str是要搜索的字符串。
substr是要搜索的子字符串。

【4】mysql的内置函数FIND_IN_SET()

可以使用MySQL的内置函数FIND_IN_SET()来实现这个需求。FIND_IN_SET()函数可以在一个由逗号分隔的字符串中查找一个值,如果找到,则返回其索引位置。

下面是一个示例查询,展示了如何将字段按逗号分割成列表,并判断列表中是否包含目标值:

SELECT *
FROM your_table
WHERE FIND_IN_SET('目标值', REPLACE(your_column, ' ', '')) > 0;

在上述查询中,您需要将your_table替换为您的表名,your_column替换为您要进行匹配的字段名,'目标值’替换为您要匹配的值。

请注意,使用REPLACE()函数将字段中的空格去除是为了避免空格干扰匹配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值