Java Oracle SQL在一列中选择特定的值,该列由许多用逗号分隔的值组成
我有一个表,有两个列名和一个包。封装的一个示例值是BGA、BGA双芯片、QFP、QFP双芯片 我如何做一个sql,它可以选择我输入的包的确切名称。 假设对于我的代码部分,bd.pkg的输入是BGAJava 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
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