SQL中最接近的部分字符串匹配

Chr*_*Gow 4 sql sql-server oracle

我有一个数据库表,其中包含部分邮政编码.我正在尝试编写一个查询,该查询将采用邮政编码,并在表中找到与该代码匹配的行尽可能接近.在下面的示例中,邮政编码为"A1A B2E"的Gold客户将匹配第一行,而具有相同邮政编码的青铜客户将匹配第三行

CUST_TYPE | POST_CODE | SHIPPING_SURCHARGE
------------------------------------------
Gold      | A1A       | 0.99
Gold      | A2A       | 1.01
Gold      | A         | 3.00
Bronze    | A         | 1.05
Silver    | A         | 1.02
Bronze    | B         | 1.07
Run Code Online (Sandbox Code Playgroud)

在所有情况下,查询都将通过CUST_TYPE和POST_CODE列进行查询.我希望查询只返回包含与邮政编码最匹配的一行的单行.所以,如果我查询Gold和'A1AB2B',我希望返回第一行(Gold,A1A,0.99),而不是第一行和第三行

ype*_*eᵀᴹ 7

SQL-服务器

SELECT TOP (1) 
    *
FROM yourTable     
WHERE CUST_TYPE = @cust_type
  AND POST_CODE = LEFT( @postal_code, LEN(POST_CODE) ) 
ORDER BY LEN(POST_CODE) DESC 
Run Code Online (Sandbox Code Playgroud)

神谕

(我现在不能测试:)

SELECT 
    *
FROM 
  ( SELECT 
        *
    FROM yourTable     
    WHERE CUST_TYPE = @cust_type
      AND POST_CODE = SUBSTR( @postal_code, 1, LENGTH(POST_CODE) ) 
    ORDER BY LENGTH(POST_CODE) DESC 
  )
WHERE rownum = 1
Run Code Online (Sandbox Code Playgroud)