наиболее близкое частичное совпадение строк в SQL - PullRequest
4 голосов
/ 14 июня 2011

У меня есть таблица базы данных, которая содержит, помимо прочего, частичные почтовые индексы.Я пытаюсь написать запрос, который будет принимать почтовый индекс и найти строку в таблице, которая соответствует этому коду как можно ближе.В приведенном ниже примере золотой клиент с почтовым индексом «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), а не первая и третья строки

Ответы [ 2 ]

7 голосов
/ 14 июня 2011

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 

Oracle

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

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
0 голосов
/ 14 июня 2011

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

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...