2011-01-20 34 views
5

Có ai biết cách thực hiện tìm kiếm/truy vấn không phân biệt chữ hoa chữ thường với Postgres 7.4 không?Tìm kiếm/truy vấn không phân biệt chữ hoa chữ thường

Tôi đã suy nghĩ RegEx nhưng không chắc chắn làm thế nào để làm điều này hoặc có thể có một chức năng/cờ hoặc một cái gì đó tôi có thể thêm các truy vấn?

Tôi đang sử dụng PHP để kết nối và thực hiện truy vấn.

Vì vậy, tôi đang tìm kiếm thông tin địa chỉ phù hợp.

Ví dụ:

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

bất kỳ suy nghĩ?

SELECT address FROM tbl WHERE address LIKE '%123 %ain%' 

Trả lời

17

Sử dụng ILIKE, ví dụ .:

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

Documentation.


Hoặc bạn có thể sử dụng UPPER hoặc LOWER, ví dụ:

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

Đừng quên thêm chỉ mục vào địa chỉ (địa chỉ) thấp hơn để tăng tốc tìm kiếm (mặc dù chỉ mục sẽ không giúp '% foo%', chỉ cho 'foo%') –

2

Ngoài iLike và() phương pháp tiếp cận thấp hơn, tôi có thể thấy hai khả năng khác:

  1. Sử dụng citext loại dữ liệu: http://www.postgresql.org/docs/9.0/static/citext.html.
  2. Sử dụng tìm kiếm văn bản đầy đủ - có thể thực sự là giải pháp linh hoạt và nhanh nhất, mặc dù phức tạp hơn một chút để bắt đầu.
+0

Tôi không chắc chắn về Citext là tương thích với Postgres 7.4 và FTS trông giống như nó sẽ là một giải pháp tuyệt vời, những nỗ lực để có được điều này chạy một cách chính xác có thể vượt quá sự cần thiết. Tôi chưa bao giờ thực sự sử dụng FTS trước đây, bạn có đề xuất và các bài viết về chủ đề có thể hướng đến địa chỉ đường phố không? –

+0

Xin lỗi tôi không thấy rằng bạn đang sử dụng một phiên bản lỗi thời như vậy. Tôi muốn nói bạn nên nâng cấp đầu tiên, và sau đó tiến hành. FTS chắc chắn không phải là một lựa chọn cho 7.x. Bạn thực sự nên thực sự cập nhật ít nhất 8.4 –

+0

nếu tôi có thể nhưng không thực sự là lựa chọn của tôi :( –

Các vấn đề liên quan