在SQL表中搜索列被拆分的格式化地址



如何在表上搜索(可能还有全文索引搜索(地址数据,地址数据的结构如下:

address table
+----+------+--------+--------+--------+-------------+-------+----------+
| id | unit | number | street |  type  |    town     | state | postcode |
+----+------+--------+--------+--------+-------------+-------+----------+
|  0 |    2 |     12 | Smith  | Street | Springfield | NSW   |     1234 |
|  1 |    0 |     16 | Bob    | Road   | Faketown    | VIC   |     4321 |
+----+------+--------+--------+--------+-------------+-------+----------+

在搜索地址时,我想搜索整个地址。理想情况下,我希望能够像这样搜索表格:

SELECT * FROM addresses WHERE address LIKE "%12 Smith Street%"

感谢您提前帮助

在这种情况下,我强烈建议使用concat_ws()而不是concat():

where concat_ws(' ', number, street, type, unit) like '%12 Smith Street%'

它不仅键入时间更短、不易出错,而且忽略了NULL值。如果concat()的任何值是NULL,则整个结果是NULL

但是,对于多列全文搜索,应该考虑使用match()。全文搜索为您提供了更大的搜索灵活性,尽管您需要小心停止词和短词。

您可以使用CONCAT函数从列中创建字符串。

select CONCAT(number, ' ', street, ' ', type) address
from address_table
where address like '%12 Smith Street%'

您没有说明address_table中列的数据类型。您可能需要将数字列转换为字符串。

最新更新