Is there a standard for storing normalized phone numbers in a database?
        Posted  
        
            by Eric Z Beard
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Eric Z Beard
        
        
        
        Published on 2008-09-03T15:22:33Z
        Indexed on 
            2010/04/21
            1:33 UTC
        
        
        Read the original article
        Hit count: 369
        
database
What is a good data structure for storing phone numbers in database fields? I'm looking for something that is flexible enough to handle international numbers, and also something that allows the various parts of the number to be queried efficiently.
[Edit] Just to clarify the use case here: I currently store numbers in a single varchar field, and I leave them just as the customer entered them. Then, when the number is needed by code, I normalize it. The problem is that if I want to query a few million rows to find matching phone numbers, it involves a function, like
where dbo.f_normalizenum(num1) = dbo.f_normalizenum(num2)
which is terribly inefficient. Also queries that are looking for things like the area code become extremely tricky when it's just a single varchar field.
[Edit]
People have made lots of good suggestions here, thanks! As an update, here is what I'm doing now: I still store numbers exactly as they were entered, in a varchar field, but instead of normalizing things at query time, I have a trigger that does all that work as records are inserted or updated. So I have ints or bigints for any parts that I need to query, and those fields are indexed to make queries run faster.
© Stack Overflow or respective owner