2011-11-09 34 views
6

Cơ sở dữ liệu của tôi chứa danh sách các số điện thoại có loại vARCHAR. Số điện thoại có thể trong bất kỳ các định dạngCần trợ giúp để viết truy vấn tìm kiếm

12323232323 
1-232-323 2323 
232-323-2323 
2323232323 

Thay vì biểu tượng có thể có (),. hoặc space Và nếu tôi tìm kiếm 12323232323, 1-232-323 2323, 232-323-2323 , hoặc 2323232323 nó sẽ hiển thị tất cả các kết quả này. Tôi cần phải viết một truy vấn cho điều này.

+0

Bạn đã xem [chức năng chuỗi MySQL] (http://dev.mysql.com/doc/refman/5.0/en/string-functions.html) chưa? –

+0

Bạn có thực sự cần lưu định dạng số điện thoại không? Bạn đã cân nhắc lưu trữ các số điện thoại trong một định dạng duy nhất và định dạng lại chúng khi bạn hiển thị chúng dựa trên cài đặt bản địa hóa của người dùng hiện tại chưa? –

+1

@Phoenix Tôi đồng ý rằng bạn có thể không muốn lưu trữ định dạng bằng số nhưng tôi không nghĩ rằng nó có ý nghĩa với định dạng dựa trên ngôn ngữ của người dùng nói một số ở định dạng Đức. Nếu nội địa hóa là một mối quan tâm bạn có thể cần phải lưu trữ mã quốc gia và sau đó định dạng số dựa trên mã đó. –

Trả lời

10

Tôi nghĩ rằng không hiệu quả khi thực hiện thời gian thực này, tôi đề xuất hai tùy chọn.

  1. làm sạch dữ liệu, vì vậy sẽ chỉ có một định dạng.

  2. thêm cột khác có chứa dữ liệu sạch, vì vậy khi bạn tìm kiếm, bạn tìm kiếm cột này, khi hiển thị, bạn có thể hiển thị dữ liệu định dạng khác nhau.

+0

Chính xác điều này. +1 –

2

Tôi đồng ý với James, nhưng nếu bạn thực sự cần tìm kiếm cơ sở dữ liệu như vậy, có thể nhà điều hành REPLACE của MySQL sẽ đưa bạn đến nơi bạn cần. Một cái gì đó như

select * from mytable where replace(crazynumber,'-','')='23232323'; 
+0

nó hoạt động tốt cho một nhân vật thay thế. Có thể thay thế một mảng chuỗi không? Trong trường hợp của tôi có thể có '(),. hoặc không gian 'Thay vì' -'. – Juice

+0

tôi đã thử với mảng như thế này '", nơi thay thế (c.customers_telephone, '". $ Chars."', '') = '". $ onlynumbers. "'"; 'và tôi nhận được truy vấn chạy như thế này' nơi thay thế (c.customers_telephone,' Array ',' ') =' 2323232323'' – Juice

+2

Lưu ý rằng nếu bạn đi tuyến đường này, bạn không thể sử dụng chỉ mục để tăng tốc truy vấn của bạn; bạn sẽ buộc MySQL thực hiện quét toàn bộ bảng cho mỗi truy vấn. Tôi khuyên bạn nên vệ sinh dữ liệu của mình để thay thế. –

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