2010-08-10 8 views
18
SELECT telephone_number 
FROM table 
WHERE telephone_number REGEXP '^1[() -]*999[() -]*999[() -]*9999$'; 

मैं कैसे किसी भी संख्या प्रारूप और तरहmySQL regex

407-888-0909 
1(408)998-7654 
7776654433 
876-7788 

किसी भी संख्या के लिए इसलिए इसकी वैध अभी 1-999-999-9999

के लिए अपने ही मान्य करते हैं
+0

आप "किसी भी संख्या स्वरूप" से क्या मतलब है? क्या आपका मतलब है कि कोई स्ट्रिंग जिसमें कम से कम एक अंक है? –

+0

हां लेकिन बिना "() -" और रिक्त स्थान – Trace

+2

[रनटाइम पर MySQL regex] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/3451567/mysql-regex-at-runtime) –

उत्तर

25

उपयोग:

SELECT telephone_number 
    FROM table 
WHERE telephone_number REGEXP '^1[() -]*[[:digit:]]{3}[() -]*[[:digit:]]{3}[() -]*[[:digit:]]{4}$'; 

संदर्भ:

+0

यदि मेरे पास 630 9991234 मान है, लेकिन डेटाबेस में इसकी (630) 9991234 में मैं एक REGEXP '^ 1 [() जोड़ सकता हूं -] * [[: अंक:]] {3} [() -] * [[: अंक:]] {3} [() -] * [[: अंक:]] {4} $ '= "630 9991234 " – Trace

+0

@ जॉन: ब्रैकेट" एम, एन "का समर्थन करते हैं, ताकि आप" 9991234 "कैप्चर करने के लिए {3,7} का उपयोग कर सकें। मैं अभी भी वैकल्पिक चरित्र समर्थन काम करने के लिए कार्यक्षमता के साथ गड़बड़ कर रहा हूँ ... –

0

रिक्त स्थान, डैश, कोष्ठक आदि के साथ डेटाबेस में फ़ोन नंबरों को स्टोर करना बहुत बुद्धिमान नहीं है। सबसे आसान तरीका यह है कि सभी कचरे को एक साधारण 10 अंकों की संख्या में छीनना। इस तरह आप वास्तव में VARCHAR के बजाय INTEGER आधारित कॉलम में संख्या को संग्रहीत कर सकते हैं।

+0

मैं सम्मिलित नहीं कर रहा हूं इसलिए मुझे – Trace

+2

खींचने की आवश्यकता है, यह आपको समस्याग्रस्त भी हो सकता है जब आपको एक्सचेंज के लिए अग्रणी 0 स्टोर करने की आवश्यकता होती है। ऐसा नहीं है कि वह ऊपर की आवश्यकता की ओर जाता है। – Matthew

+0

VARCHAR का उपयोग करें लेकिन सम्मिलन से पहले इसे स्वच्छ करें (उदाहरण के लिए रिक्त स्थान/डैश/... से छुटकारा पाएं) –

0
SELECT telephone_number 
    FROM table 
WHERE telephone_number REGEXP '[1]?[(]?[[:DIGIT:]]{3}[)]?[-]?[[:DIGIT:]]{3}[-]?[[:DIGIT:]]{4}'