2011-11-09 22 views
6

Moja baza danych zawiera listę numerów telefonów typu varchar. Numer telefonu może być w każdym z tych formatówPotrzebujesz pomocy w pisaniu zapytania wyszukiwawczego

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

Zamiast symbolem może być (),. lub space I jeśli szukać 12323232323, 1-232-323 2323, 232-323-2323 lub 2323232323 powinien wyświetlać wszystkie te wyniki. Muszę napisać zapytanie na ten temat.

+0

Czy obejrzałeś [funkcje MySQL string] (http://dev.mysql.com/doc/refman/5.0/en/string-functions.html)? –

+0

Czy na pewno zapisać formatowanie numerów telefonów? Czy rozważałeś przechowywanie numerów telefonów w jednym formacie i ponowne ich formatowanie, gdy wyświetlasz je w oparciu o ustawienia lokalizacji bieżącego użytkownika? –

+1

@Phoenix Zgadzam się, że możesz nie chcieć zapisywać formatu z numerem, ale nie sądzę, że formatowanie miałoby sens w zależności od lokalizacji użytkownika, powiedzmy numer US w formacie niemieckim. Jeśli lokalizacja była problemem, prawdopodobnie musisz zapisać kod kraju, a następnie sformatować numer na podstawie tego kodu. –

Odpowiedz

10

Wydaje mi się, że nie jest to skuteczne w czasie rzeczywistym, proponuję dwie opcje.

  1. wyczyścić dane, więc nie będzie tylko jeden format.

  2. dodać kolejną kolumnę, która zawiera czyste dane, więc podczas wyszukiwania wyszukuje się tę kolumnę, podczas wyświetlania można wyświetlić różne dane formatu.

+0

Dokładnie to. +1 –

2

zgadzam się z Jamesem, ale jeśli naprawdę potrzebujesz, aby przeszukać bazę danych, jak to jest, być może MySQL REPLACE operator będzie Ci gdzie trzeba iść. Coś jak

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

działa dobrze, aby zastąpić pojedynczy znak. Czy można zastąpić tablicę ciągów? W moim przypadku może być '(),. lub spacja 'Zamiast' -'. – Juice

+0

Próbowałem z tablicą taką jak ta "gdzie zamień (c.customers_telephone," ". $ Chars." ',' ') =' ". $ onlynumbers. "" ";' i otrzymuję zapytanie tak: 'gdzie zamień (c.customers_telephone, 'Array', '') = '2323232323'' – Juice

+2

Pamiętaj, że jeśli przejdziesz tę trasę, nie możesz użyć indeksu przyspieszyć zapytanie; zmusisz MySQL do wykonania pełnego skanowania tabeli dla KAŻDEGO zapytania. Zdecydowanie zalecam odkażenie danych. –

Powiązane problemy