我有一个数据库表,其中包含部分邮政编码。我正在尝试编写一个查询,该查询将采用邮政编码,并在表中找到与该代码匹配的行尽可能接近。在下面的示例中,邮政编码为“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
在所有情况下,查询都将通过CUST_TYPE和POST_CODE列进行查询。我希望查询只返回包含与邮政编码最匹配的一行的单行。所以,如果我查询Gold和'A1AB2B',我希望第一行(Gold,A1A,0.99)不返回第一行和第三行
答案 0 :(得分: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
<强>的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
答案 1 :(得分:0)
您只需按以下方式编写条件:
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。