CONCAT() और RIGHT() के साथ पैडिंग
संख्यात्मक सीरियल नंबर को फिक्स्ड-लेंथ, हाइफन-सेपरेटेड फॉर्मेट (जैसे 000-100) में बदलने के लिए स्ट्रिंग कंकेटनेशन और सबस्ट्रिंग एक्सट्रैक्शन का उपयोग करें।
उदाहरण: टेबल बनाना और डेटा इन्सर्ट करना
mysql> CREATE TABLE DemoTable829(SerialNumber INT); Query OK, 0 rows affected (0.64 sec)
रिकॉर्ड्स इन्सर्ट करना
mysql> INSERT INTO DemoTable829 VALUES(100),(101),(102),(103),(104); Query OK, 5 rows affected (...)
सभी रिकॉर्ड्स देखना
mysql> SELECT * FROM DemoTable829;
+--------------+ | SerialNumber | +--------------+ | 100 | | 101 | | 102 | | 103 | | 104 | +--------------+ 5 rows in set (0.00 sec)
हाइफन के साथ बाएं पैडिंग क्वेरी
mysql> SELECT RIGHT(CONCAT('000-', SerialNumber), 7) FROM DemoTable829;
परिणाम
+----------------------------------------+
| RIGHT(CONCAT('000-', SerialNumber), 7) |
+----------------------------------------+
| 000-100 |
| 000-101 |
| 000-102 |
| 000-103 |
| 000-104 |
+----------------------------------------+
5 rows in set (0.00 sec)
क्वेरी व्याख्या
CONCAT('000-', SerialNumber)- प्रीफिक्स '000-' जोड़ता है: '000-100', '000-101', आदिRIGHT(..., 7)- दाएं से 7 वर्ण लेता है: '000-100' (7 वर्ण)- यह मानता है कि SerialNumber अधिकतम 3 अंकों का है (100-999)
सामान्य फॉर्मूला
RIGHT(CONCAT(REPEAT('0', max_digits - 1) + '-', SerialNumber), max_digits + 1)
उदाहरण: 5 अंकों तक के लिए (00000-99999)
SELECT RIGHT(CONCAT('00000-', SerialNumber), 11) FROM DemoTable829;
-- '00000-100', '00000-101', आदि
बेहतर तरीका: LPAD() फंक्शन
SELECT CONCAT(LPAD(SerialNumber, 3, '0'), '-', LPAD(SerialNumber, 3, '0')) -- गलत
-- सही: दो भागों में विभाजित (यदि आवश्यक)
SELECT CONCAT(LPAD(FLOOR(SerialNumber/1000), 3, '0'), '-', LPAD(SerialNumber % 1000, 3, '0'))
-- लेकिन सरल मामले के लिए:
SELECT CONCAT('000-', LPAD(SerialNumber, 3, '0')) -- '000-100' के लिए LPAD अनावश्यक
सही LPAD उपयोग
-- SerialNumber को 3 अंकों में पैड करें, फिर प्रीफिक्स जोड़ें
SELECT CONCAT('000-', LPAD(SerialNumber, 3, '0')) FROM DemoTable829;
-- परिणाम: '000-100', '000-101', ... (यदि SerialNumber पहले से 3 अंक है तो LPAD कुछ नहीं करता)
FORMAT() फंक्शन (MySQL 8.0+)
SELECT CONCAT('000-', FORMAT(SerialNumber, 0)) FROM DemoTable829;
-- FORMAT 1000 सेपरेटर जोड़ता है: 1,000 → अवांछित
जनरेटेड कॉलम के साथ स्थायी स्टोरेज
ALTER TABLE DemoTable829
ADD SerialFormatted VARCHAR(20) AS (CONCAT('000-', LPAD(SerialNumber, 3, '0'))) STORED;
प्रिंट/डिस्प्ले के लिए printf-स्टाइल (एप्लिकेशन लेयर)
-- Python: f"{num:03d}" → "100"
-- PHP: sprintf("%03d", $num)
-- Java: String.format("%03d", num)
उपयोग के मामले
- इनवॉइस नंबर:
INV-000-100 - उत्पाद SKU:
PRD-000-100 - कर्मचारी ID:
EMP-000-100 - टिकट नंबर:
TKT-000-100