Java Oracle SQL在一列中选择特定的值,该列由许多用逗号分隔的值组成

Java Oracle SQL在一列中选择特定的值,该列由许多用逗号分隔的值组成,java,sql,oracle,grails,Java,Sql,Oracle,Grails,我有一个表,有两个列名和一个包。封装的一个示例值是BGA、BGA双芯片、QFP、QFP双芯片 我如何做一个sql,它可以选择我输入的包的确切名称。 假设对于我的代码部分,bd.pkg的输入是BGA def generateBdHistoryTable(ApprovalHeader ah,BondingDiagram bd){ if(bd.pkg!=null){ String kitTypeHolder; def kitTyp

我有一个表,有两个列名和一个包。封装的一个示例值是BGA、BGA双芯片、QFP、QFP双芯片

我如何做一个sql,它可以选择我输入的包的确切名称。 假设对于我的代码部分,bd.pkg的输入是BGA

def generateBdHistoryTable(ApprovalHeader ah,BondingDiagram bd){
    if(bd.pkg!=null){
                String kitTypeHolder;
                def kitTypeMap = [:];
                List kitTypeLists = KitType.executeQuery("select name from KitType where (packages like '"+bd.pkg+"%' or packages like '%,"+bd.pkg+"%')");
结果是同时包含这两个元素的行

BGA  
BGA DUAL DIE
当输入为“BGA”时,我只希望包BGA的名称是result,当输入为“so”时,我希望包BGA的名称是DUAL DIE,等等。我应该如何查询这样的情况?

而不是使用like子句,您可以使用CHARINDEX。试试下面的方法

WHERE CHARINDEX('BGA',ColumnName) >0)
这是MySQL的。 将INSTR用于Oracle服务器

select name
from   KitType
where  ','||packages||',' like '%,BGA,%'
或使用正则表达式:

select name
from   KitType
where  REGEXP_LIKE( packages, '(^|,)BGA(,|$)' )
您可以尝试以下方法:

select *
from yourTable
where regexp_instr(packages, '(^|\, )QFP(\,|$)') != 0
在Oracle11g中,条件检查输入字符串“BGA”存在且后跟逗号或位于字符串末尾的行,正如MT0正确建议的那样,这些行前面带有“,”或位于字符串的开头

从中选择* 选择 REGEXP_子包, “,[^,]+,”包 来自双重 其中,包=输入

在SQL Server中

创建下面的函数

创建函数[dbo]。[fnSplitString] @字符串NVARCHARMAX, @分隔符CHAR1 返回@output tabletsplitdata NVARCHARMAX 开始 声明@start INT、@end INT 选择@start=1,@end=CHARINDEX@delimiter,@string 而@start
    INSERT INTO @output (splitdata)  
    VALUES(SUBSTRING(@string, @start, @end - @start)) 
    SET @start = @end + 1 
    SET @end = CHARINDEX(@delimiter, @string, @start)

END 
RETURN 
结束

从dbo.fnSplitString'Packages'中选择splitdata,其中splitdata=Input


谢谢

你真的在这里同时使用MySQL和Oracle吗?不要给不涉及的产品贴标签,我已经纠正了。谢谢,当我尝试它的时候,我还需要一个包BGA双芯片的名称,这个值BGA在这个包中并没有it@Memoc如果你想要准确的字符串,那么我已经更新了答案。那XXBGA,ABC呢?这将通过您的测试,但不完全包含BGA字符串。很抱歉,这是MySQL的。对于ORACLE,您可以使用INSTR