怎么让数据库中的字符串部分匹配查询字符串
如何让数据库中的字符串部分匹配查询字符串?
如果是查询字符串短于或等于数据库中的字符串那很好办:
首端匹配
select * from tab where filed like 'string%'
尾端匹配
select * from tab where filed like '%string'
包含
select * from tab where filed like '%string%'
可是查询的字符串长于数据库中的字符串时该咋办?
比如用 stringbb 这个字符串进行首端匹配查询时,要把数据库中的这些字符记录都提出来:
string
stringb
stringbb
stringbbccdd
stringbbccddeeff
比如用 bbstring这个字符串进行尾端匹配查询时,要把数据库中的这些字符记录都提出来:
aaabbbstring
bbstring
bstring
string
比如用 aastringbb这个字符串进行包含匹配查询时,要把数据库中的这些字符记录都提出来:
string
astringb
astring
stringb
cccdddaastringbb
cccddeaastringbbeeffff
------解决思路----------------------
你举的例子中,先要找出词根的所有数据行,在此词根为string,
然后再删除string+一个字符不匹配的,string+两个个字符不匹配的…….数据行。
一步得出结果的选取应该不行。
上面是一个思路,应该还有其它做法。
------解决思路----------------------
试试这样符不符合你的要求
如果是查询字符串短于或等于数据库中的字符串那很好办:
首端匹配
select * from tab where filed like 'string%'
尾端匹配
select * from tab where filed like '%string'
包含
select * from tab where filed like '%string%'
可是查询的字符串长于数据库中的字符串时该咋办?
比如用 stringbb 这个字符串进行首端匹配查询时,要把数据库中的这些字符记录都提出来:
string
stringb
stringbb
stringbbccdd
stringbbccddeeff
比如用 bbstring这个字符串进行尾端匹配查询时,要把数据库中的这些字符记录都提出来:
aaabbbstring
bbstring
bstring
string
比如用 aastringbb这个字符串进行包含匹配查询时,要把数据库中的这些字符记录都提出来:
string
astringb
astring
stringb
cccdddaastringbb
cccddeaastringbbeeffff
------解决思路----------------------
你举的例子中,先要找出词根的所有数据行,在此词根为string,
然后再删除string+一个字符不匹配的,string+两个个字符不匹配的…….数据行。
一步得出结果的选取应该不行。
上面是一个思路,应该还有其它做法。
------解决思路----------------------
with tm (code) as
(
select 'string' union all
select 'astringb' union all
select 'astring' union all
select 'stringb' union all
select 'cccdddaastringbb' union all
select 'cccddeaastringbbeeffff'
)
select * from tm where code like '%aastringbb%' or 'aastringbb' like '%'+code+'%'
试试这样符不符合你的要求