在字符串中查找公共字符串

时间:2016-09-02 13:54:06

标签: sql sql-server

我在数据库中有以下数据:

index

我想创建一个将传递值

的查询
  

' 030203082'

,它将显示以下所有记录。

0203020308260226
020302030826022633
02030203082602263332
0203020308270201
0203020308270222
0203020308290218
02030203082902180208
0203020308290224
02030203082902240208

但如果我通过

  

' 0302030829999'

它也应该归还给我 结果,因为至少80%匹配。

0203020308260226
020302030826022633
02030203082602263332
0203020308270201
0203020308270222
0203020308290218
02030203082902180208
0203020308290224
02030203082902240208
02030203082902240208

我试过这个查询

0203020308260226
    020302030826022633
    02030203082602263332
    0203020308270201
    0203020308270222
    0203020308290218
    02030203082902180208
    0203020308290224
    02030203082902240208
    02030203082902240208

3 个答案:

答案 0 :(得分:2)

我不确定我是否完全理解您的问题,但您可以使用DIFFERENCE功能,例如

SELECT *
FROM yourtable
WHERE DIFFERENCE('0302030829999', column) = 4;

答案 1 :(得分:0)

如果您要在列中搜索特定长度的单词,请尝试使用以下查询。

  SELECT *
   FROM YourTable
   WHERE columnA like '%'+LEFT('0302030829999',9)+'%'

答案 2 :(得分:0)

这可以作为一个起点

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

希望有所帮助