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%或更高的最低结果。这对我不起作用:(我很抱歉并感谢分享)这对我不起作用:(我很抱歉并感谢分享