यहाँ SQL सर्वर में फ़ोन नंबरों को स्वरूपित करने के कुछ उदाहरण दिए गए हैं।
इसमें ई.164 प्रारूप (अंतर्राष्ट्रीय नंबरों के लिए) में स्वरूपण संख्याओं के उदाहरण शामिल हैं, देश कोड और क्षेत्र कोड तैयार करना, साथ ही आवश्यकता होने पर देश कोड से अग्रणी शून्य को छोड़ना।
संख्यात्मक फ़ोन नंबर
यदि फ़ोन नंबर एक संख्यात्मक मान के रूप में संग्रहीत है (जो यह नहीं होना चाहिए), तो आप FORMAT()
का उपयोग कर सकते हैं इसे फ़ोन नंबर के रूप में प्रारूपित करने के लिए कार्य करें।
उदाहरण:
SELECT FORMAT(0234567890, '000-000-0000');
परिणाम:
023-456-7890
पहला तर्क फोन नंबर है और दूसरा तर्क प्रारूप स्ट्रिंग है। इस उदाहरण में मैं एक कस्टम प्रारूप स्ट्रिंग का उपयोग कर रहा हूं। आप वांछित फ़ोन नंबर प्रारूप के अनुरूप प्रारूप स्ट्रिंग को समायोजित कर सकते हैं:
SELECT FORMAT(0234567890, '(000) 000-0000');
परिणाम:
(023) 456-7890
यह जानना महत्वपूर्ण है कि प्रारूप तार वास्तव में क्या करते हैं। शून्य का उपयोग करते समय, आपको यह सुनिश्चित करने की आवश्यकता होगी कि फ़ोन नंबर में वास्तव में हर उस स्थान पर अंक हैं जहां एक शून्य प्रारूप विनिर्देशक है (अन्यथा आप गलती से संख्या में शून्य जोड़ सकते हैं)।
आपको यह भी सुनिश्चित करना होगा कि प्रत्येक अंक से मेल खाने के लिए एक प्रारूप विनिर्देशक है (अन्यथा आप फ़ोन नंबर से अंक हटा देंगे)।
प्रारूप स्ट्रिंग को व्यक्त करने का दूसरा तरीका #
. के साथ है प्रारूप विनिर्देशक। हालांकि, इसके परिणामस्वरूप फ़ोन नंबर से किसी भी अग्रणी शून्य को हटा दिया जाएगा।
मेरा मतलब समझाने के लिए यहां एक उदाहरण दिया गया है:
SELECT
FORMAT(0234567890, '000-000-0000') AS "000-000-0000",
FORMAT(0234567890, '###-###-####') AS "###-###-####";
परिणाम:
+----------------+----------------+ | 000-000-0000 | ###-###-#### | |----------------+----------------| | 023-456-7890 | 23-456-7890 | +----------------+----------------+
FORMAT()
फ़ंक्शन केवल संख्यात्मक प्रकार और डेटाटाइम मान स्वीकार करता है। यदि इनपुट फ़ोन नंबर वास्तव में एक संख्यात्मक प्रकार नहीं है, तो आपको शायद एक त्रुटि मिलेगी, कुछ इस तरह:
SELECT FORMAT('0234567890', '000-000-0000');
परिणाम:
Msg 8116, Level 16, State 1, Line 1 Argument data type varchar is invalid for argument 1 of format function.
ऐसे मामलों में, मान को संख्यात्मक प्रकार में बदलना काफी आसान है:
SELECT FORMAT(CAST('0234567890' AS int), '000-000-0000');
परिणाम:
023-456-7890
लेकिन फ़ोन नंबरों को वैसे भी संख्यात्मक प्रकारों के रूप में संग्रहीत नहीं किया जाना चाहिए।
संख्यात्मक मानों को ऊपर या नीचे गोल किया जा सकता है, उन पर गणना की जा सकती है, महत्वहीन शून्य स्वचालित रूप से हटा दिए जाते हैं, आदि।
फोन नंबर एक निश्चित मूल्य हैं। प्रत्येक अंक महत्वपूर्ण है (अग्रणी शून्य सहित)। हम नहीं चाहते कि अग्रणी शून्य गायब हो जाएं जब तक कि हमें इसकी स्पष्ट रूप से आवश्यकता न हो (उदाहरण के लिए देश कोड के लिए)। और हम नहीं चाहते कि हमारे फोन नंबर अनजाने में ऊपर या नीचे गोल हो जाएं। और इसकी संभावना नहीं है कि आपको कभी भी अपने फ़ोन नंबरों पर गणना करने की आवश्यकता होगी।
इसलिए फोन नंबरों को एक स्ट्रिंग के रूप में स्टोर करना अधिक समझ में आता है। उन्हें स्वरूपित करने से पहले एक संख्यात्मक प्रकार में परिवर्तित करना (जैसे उपरोक्त उदाहरण में) अभी भी संख्या में अनपेक्षित परिवर्तन किए जा सकते हैं।
यदि फ़ोन नंबर पहले से ही एक स्ट्रिंग है, तो निम्न विधि का प्रयास करें।
फ़ोन नंबर स्ट्रिंग के रूप में संग्रहीत हैं
यदि फ़ोन नंबर एक स्ट्रिंग के रूप में संग्रहीत है, तो आप STUFF()
. का उपयोग कर सकते हैं प्रासंगिक स्थानों पर फ़ोन नंबर में उपयुक्त तार डालने का कार्य करता है।
उदाहरण:
SELECT
STUFF(STUFF('0234567890', 7, 0, '-'), 4, 0, '-') AS "Format 1",
STUFF(STUFF(STUFF('0234567890', 7, 0, '-'), 4, 0, ') '), 1, 0, '(') AS "Format 2";
परिणाम:
+--------------+----------------+ | Format 1 | Format 2 | |--------------+----------------| | 023-456-7890 | (023) 456-7890 | +--------------+----------------+
पहला तर्क मूल स्ट्रिंग है (इस मामले में, फ़ोन नंबर), और चौथा तर्क डालने के लिए स्ट्रिंग है। दूसरा तर्क निर्दिष्ट करता है कि चौथा तर्क कहाँ सम्मिलित करना है।
तीसरा तर्क निर्दिष्ट करता है कि मूल स्ट्रिंग से कितने वर्णों को हटाना है (यदि आप कुछ वर्णों को नई स्ट्रिंग से बदलना चाहते हैं)। हमारे मामले में, हम किसी भी वर्ण को हटाना नहीं चाहते हैं, और इसलिए हम 0
. का उपयोग करते हैं ।
मूल फ़ोन नंबर के प्रारूप के आधार पर, इसे करने का दूसरा तरीका REPLACE()
का उपयोग करना है समारोह। यह कहां उपयोगी हो सकता है इसका एक उदाहरण यह है कि जब फ़ोन नंबर पहले से ही एक विभाजक के साथ स्वरूपित होता है, लेकिन इसे किसी अन्य विभाजक के साथ बदलने की आवश्यकता होती है:
SELECT REPLACE('023 456 7890', ' ', '-');
परिणाम:
023-456-7890
अंतर्राष्ट्रीय नंबर
E.164 एक अंतरराष्ट्रीय मानक है जो अंतरराष्ट्रीय टेलीफोन नंबरों के प्रारूप को परिभाषित करता है।
E.164 नंबर प्रारूपित हैं [+][country code][area code][local phone number]
और इसमें अधिकतम पंद्रह अंक हो सकते हैं।
यहां एक उदाहरण दिया गया है जो देश कोड, क्षेत्र कोड और फ़ोन नंबर को संयोजित करने के लिए दो विधियों का उपयोग करता है:
SELECT
CONCAT('+', '1', '415', '4567890') AS 'CONCAT() Function',
'+' + '1' + '415' + '4567890' AS 'Concatenation Operator';
परिणाम:
+---------------------+--------------------------+ | CONCAT() Function | Concatenation Operator | |---------------------+--------------------------| | +14154567890 | +14154567890 | +---------------------+--------------------------+
पहली विधि CONCAT()
. का उपयोग करती है फ़ंक्शन, और दूसरा संयोजन ऑपरेटर का उपयोग करता है (+
)।
वह उदाहरण यूएस आधारित संख्या को प्रारूपित करता है। कई देशों में, क्षेत्र कोड में एक अग्रणी शून्य होता है जिसे E.164 प्रारूप का उपयोग करते समय छोड़ने की आवश्यकता होती है।
किसी भी अग्रणी शून्य को दबाने का एक तरीका क्षेत्र कोड को एक संख्यात्मक मान में बदलना और फिर से वापस करना है।
यूके आधारित नंबर पर उस तकनीक का उपयोग करने का एक उदाहरण यहां दिया गया है:
SELECT CONCAT(
'+',
'44',
CAST(CAST('020' AS int) AS varchar(3)),
'34567890'
);
परिणाम:
+442034567890
इस मामले में अग्रणी शून्य गिरा दिया गया था।
यहां वही कोड है जो पिछले यूएस आधारित नंबर के खिलाफ चलता है (जो देश कोड में अग्रणी शून्य का उपयोग नहीं करता है):
SELECT CONCAT(
'+',
'1',
CAST(CAST('415' AS int) AS varchar(3)),
'4567890'
);
परिणाम:
+14154567890
इस बार कंट्री कोड तीन अंकों पर रहा।