Sql 在字符串中查找公共字符串
我在数据库中有以下数据:Sql 在字符串中查找公共字符串,sql,sql-server,Sql,Sql Server,我在数据库中有以下数据: 0203020308260226 020302030826022633 02030203082602263332 0203020308270201 0203020308270222 0203020308290218 02030203082902180208 0203020308290224 02030203082902240208 我想创建一个将传递值为的查询 “030203082” 它将显示以下所有记录 0203020308260226 02030203082602
0203020308260226
020302030826022633
02030203082602263332
0203020308270201
0203020308270222
0203020308290218
02030203082902180208
0203020308290224
02030203082902240208
我想创建一个将传递值为的查询
“030203082”
它将显示以下所有记录
0203020308260226
020302030826022633
02030203082602263332
0203020308270201
0203020308270222
0203020308290218
02030203082902180208
0203020308290224
02030203082902240208
02030203082902240208
但如果我通过
'0302030829999'
它也应该返回我以下
结果,因为至少有80%匹配
0203020308260226
020302030826022633
02030203082602263332
0203020308270201
0203020308270222
0203020308290218
02030203082902180208
0203020308290224
02030203082902240208
02030203082902240208
我试过这个问题
select * from table where columnA like '%02%' and columnA like '%03%'
columnA like '%02%' and columnA like '%08%' and columnA like '%31%'
and columnA like '%99%' and columnA like '%99%'
如果要在列中搜索具有特定长度的单词,请尝试以下查询
SELECT *
FROM YourTable
WHERE columnA like '%'+LEFT('0302030829999',9)+'%'
如果要在列中搜索具有特定长度的单词,请尝试以下查询
SELECT *
FROM YourTable
WHERE columnA like '%'+LEFT('0302030829999',9)+'%'
这可以是一个起点
DECLARE @SearchKey VARCHAR(100) = '0302030829999'
SELECT *
FROM MyTable
WHERE columnA LIKE '%' + @SearchKey +'%' -- Exact match
OR columnA LIKE '%' + LEFT(@SearchKey,LEN(@SearchKey)*0.8) +'%' -- 80% from start
OR columnA LIKE '%' + RIGHT(@SearchKey,LEN(@SearchKey)*0.8) +'%' -- 80% from end
希望能有所帮助这可以作为一个起点
DECLARE @SearchKey VARCHAR(100) = '0302030829999'
SELECT *
FROM MyTable
WHERE columnA LIKE '%' + @SearchKey +'%' -- Exact match
OR columnA LIKE '%' + LEFT(@SearchKey,LEN(@SearchKey)*0.8) +'%' -- 80% from start
OR columnA LIKE '%' + RIGHT(@SearchKey,LEN(@SearchKey)*0.8) +'%' -- 80% from end
希望有帮助我不确定我是否完全理解您的问题,但您可以使用该功能,例如
SELECT *
FROM yourtable
WHERE DIFFERENCE('0302030829999', column) = 4;
我不确定我是否完全理解您的问题,但您可以使用该功能,例如
SELECT *
FROM yourtable
WHERE DIFFERENCE('0302030829999', column) = 4;
你的问题是什么?我的猜测是:“对于九个字符的子字符串,请帮助我完成一个查询,该查询返回
ColumnA
包含该子字符串的所有记录。对于十三个字符的子字符串,返回包含子字符串中至少十个字符的记录?”关系数据库不适合这种类型的字符串操作。您需要编写自己的函数来进行比较。80%是完全不清楚的。例如,“ZZ123AB678XYZ”和“1234567890”的匹配百分比是多少?我需要90%以上的相似度。我想得到所有这些单词的结果,即使没有下面的序列。你的问题是什么?我的猜测是:“对于九个字符的子字符串,请帮助我完成一个查询,该查询返回ColumnA
包含该子字符串的所有记录。对于十三个字符的子字符串,返回包含子字符串中至少十个字符的记录?”关系数据库不适合这种类型的字符串操作。您需要编写自己的函数来进行比较。80%是完全不清楚的。例如,“ZZ123AB678XYZ”和“1234567890”的匹配百分比是多少?我需要90%以上的相似度。我想得到所有包含这些单词的结果,即使没有下面的序列。从未使用过此函数,尽管它是从SQL Server 2008开始应用的。简单明了,谢谢。亲爱的克里斯,谢谢分享。选择差异('3014021033026330819','0819');它还返回4。我收到了这么多的结果。这不是我想要的。我希望得到相似性为90%或更高的最小结果。尽管从SQL Server 2008开始应用此函数,但从未使用过此函数。简单明了,谢谢。亲爱的克里斯,谢谢分享。选择差异('3014021033026330819','0819');它还返回4。我收到了这么多的结果。这不是我想要的。我想得到相似性为90%或更高的最低结果。这对我不起作用:(我很抱歉并感谢分享)这对我不起作用:(我很抱歉并感谢分享