2011-01-20 25 views
5

有誰知道如何使用Postgres 7.4做不區分大小寫的搜索/查詢?不區分大小寫的搜索/查詢

我在想RegEx,但不知道如何做到這一點,或者有一個函數/標誌或我可以添加查詢?

我使用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%' 

回答

17

使用ILIKE,例如:

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

Documentation


另外,您可以使用UPPERLOWER,如:

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

不要忘了在lower(address)上加一個索引來加快搜索速度(儘管索引對`foo%`沒有幫助,只對`foo%`) – 2011-01-20 22:31:24

2

除了ILIKE和下()方法,我可以看到其他兩種可能性:

  1. 使用citext數據類型:http://www.postgresql.org/docs/9.0/static/citext.html
  2. 使用全文搜索 - 這實際上可能是最靈活和最快速的解決方案,儘管開始時有點複雜。
+0

我不是肯定Citext與Postgres 7.4兼容,而FTS看起來好像是一個很好的解決方案,但正確運行它的努力可能會超出需求。我從來沒有真正使用過FTS,您是否推薦過這方面的文章以及可能面向街道地址的文章? – 2011-01-21 15:13:53