наиболее близкое частичное совпадение строк в SQL



У меня есть таблица базы данных, которая содержит, среди прочего, частичные почтовые индексы. Я пытаюсь написать запрос, который возьмет почтовый индекс и найдет строку в таблице, которая соответствует этому коду как можно ближе. В приведенном ниже примере Золотой клиент с почтовым индексом "A1A B2E" будет соответствовать первой строке, а бронзовый клиент с тем же почтовым индексом будет соответствовать третьей строке



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


Во всех случаях запрос будет запрашиваться как по столбцам CUST_TYPE, так и POST_CODE. Я бы хотел ... запрос, возвращающий только одну строку, содержащую одну строку, которая наилучшим образом соответствует почтовому коду. Таким образом, если я запрошу Gold и 'A1AB2B', я хотел бы, чтобы первая строка (Gold, A1A, 0.99) возвращалась не как первая, так и третья строки

886   2  

2 ответов:

SQL-Server

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 

Оракул

(я не могу проверить сейчас:)

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

Вам нужно просто написать условие следующим образом:

SELECT * FROM YOUR_TABLE     
WHERE CUST_TYPE = Variable_with_cust_type AND 
Variable_with_postal_code like '%'||POST_CODE||'%'

Вы просто объединяете " % " в начале и в конце поля POST_CODE, а затем используете оператор like.

Я предполагаю, что вы используете ORACLE PL / SQL.

Comments

    Ничего не найдено.