我有一个地址表,分为 STREET_NUMBER 和 STREET_NAME 以及相关字段。我想在表中搜索特定的地址列表。我可以使用以下命令运行单地址查询:
Select * from TABLE
WHERE STREET_NUMBER = '123'
AND STREET_NAME LIKE '%MAIN%'
如何设置 WHERE 子句来接受 STREET_NAME/STREET_NUMBER 对列表?大致如下:
Select * from TABLE
WHERE STREET_NUMBER in ('123', '231', '5245', '73334')
AND STREET_NAME LIKE ('%MAIN%', '%ELM%', '%BROAD%', '%FIRST%')
目的是提取地址接近的任何记录:
数量 | 街道 |
---|---|
123 | 主要 |
231 | 榆木 |
5245 | 广阔 |
73334 | 第三 |
我需要类似于 STREET_NAME 的 LIKE 功能,因为该列中的值不是很干净 - 全部都包括街道延伸部分,但它们不一致(“Road”与“Rd”;“Avenue”与“Ave”等) .).
没有办法在“常规”SQL 中优雅且有效地做到这一点。 您必须开始使用 Oracle Text 或将数据复制到 Elasticsearch 中。
Select * from TABLE
WHERE 1=0
or (STREET_NUMBER = '123' and STREET_NAME LIKE '%MAIN%')
or (STREET_NUMBER = '231' and STREET_NAME LIKE '%ELM%')
or (STREET_NUMBER = '5245' AND STREET_NAME LIKE '%BROAD%')
or (STREET_NUMBER = '73334' AND STREET_NAME LIKE '%FIRST%')