不区分大小写的搜索/查询

5

有人知道如何在Postgres 7.4中进行不区分大小写的搜索/查询吗?

我想到了正则表达式,但不确定如何做到这一点,或者可能有一个函数/标志或其他东西可以添加到查询中吗?

我正在使用PHP连接和执行查询。

因此,我正在寻找匹配地址信息的方法。

例如:

123 main street
123 Main st.
123 Main Street
123 main st
123 Main st
etc...

有什么想法吗?

SELECT address FROM tbl WHERE address LIKE '%123 %ain%'
2个回答

17

使用 ILIKE,例如:

...
WHERE 
    address ILIKE '123 main st%'

文档.


或者您可以使用 UPPERLOWER,例如:

...
WHERE 
    LOWER(address) LIKE '123 main st%'

1
不要忘记在 lower(address) 上添加索引以加速搜索(尽管对于 %foo% 而言,索引无法帮助,只有对于 foo% 才有效)。 - user330315

2
除了使用ILIKE和lower()方法,我还发现两个其他的可能性:
  1. 使用citext数据类型:http://www.postgresql.org/docs/9.0/static/citext.html
  2. 使用全文本搜索-这可能实际上是最灵活和最快速的解决方案,尽管启动略微复杂。

我不确定Citext是否与Postgres 7.4兼容,而FTS看起来似乎是一个很好的解决方案,但为了正确运行它所需的努力可能超出了需要。我以前从未真正使用过FTS,您是否推荐有关此主题的文章,可能针对街道地址? - Phill Pafford
抱歉,我没有看到你使用的是如此过时的版本。我建议您先升级,然后再继续。在7.x中FTS绝对不是一个选项。您应该真正地升级至少到8.4。 - user330315
我如果能的话,但这并不是我的选择 :( - Phill Pafford

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接