2011-02-04 6 views
23

मुझे एक SQLite डेटाबेस मिला है जिसमें उत्पादों को शामिल करने की आवश्यकता होगी। उन उत्पादों में एक निश्चित प्रारूप समग्र उत्पाद संख्या है, जिसमें श्रेणी, समूह और उत्पाद संख्या (cccccc.gg.ppp) शामिल है। प्रत्येक बार जब कोई नया उत्पाद डाला जाता है, तो नए उत्पाद संख्या को श्रेणी और समूह संख्याओं का उपयोग करके बनाया जाना चाहिए, उसके बाद उस समूह में उच्चतम उत्पाद संख्या एक के साथ बढ़ी है।SQLite फ़ंक्शन अग्रणी शून्यों के साथ संख्याओं को प्रारूपित करने के लिए?

अंत में, मैं अलग-अलग क्षेत्रों में सभी तीन नंबरों को संग्रहित करने की सोच रहा था, और उत्पाद संख्या को गतिशील रूप से इकट्ठा करने के लिए एक दृश्य का उपयोग करता था। इसके लिए काम करने के लिए, मुझे अग्रणी शून्य जोड़ने की आवश्यकता होगी, क्योंकि उत्पाद संख्या का प्रारूप तय किया गया है।

हालांकि, मुझे लगता है नहीं कर पा रहे एक अंतर्निहित SQLite समारोह जो मुझे ऐसा करते हैं कि ... :-(

मैं नहीं बल्कि हम करना पड़ सकता है के बाद से, एक कस्टम समारोह लिखना नहीं चाहते हैं डेटाबेस को अन्य डेवलपर्स के साथ साझा करें, उनके लिए डेटा पढ़ने के लिए; और मुझे नहीं पता कि वे किस प्लेटफॉर्म या भाषा का उपयोग करने जा रहे हैं।

क्या यह किया जा सकता है? या हमें एक अलग समाधान मिलना होगा?

उत्तर

48

स्ट्रिंग कॉन्सटेनेशन और substr फ़ंक्शन का उपयोग करके इसे थोड़ा सा जादू के साथ पूरा किया जा सकता है। लंबी कहानी छोटी, यहां आप जो चाहते हैं:

select substr('0000000000'||'1234', -10, 10) 

एक स्पष्टीकरण निम्नानुसार है।

सबसे पहले, पता है कि SQLite का स्ट्रिंग कॉन्सटेनेशन ऑपरेटर || है।

हम एक स्ट्रिंग लेकर शुरू करेंगे जब तक हम जिस मूल्य को वापस करना चाहते हैं। उदाहरण के लिए, यदि आप एक ऐसे नंबर को वापस करना चाहते हैं जो हमेशा 10 वर्ण लंबा रहता है और इसे 0 एस के साथ गद्दी छोड़ दिया जाता है, तो यह छोटा है, तो दस 0 एस की स्ट्रिंग के साथ शुरू करें। उस पर, हम उस नंबर को जोड़ देंगे जो आप वापस करना चाहते हैं। हमारे उदाहरण में, यह '1234' है। अब तक, हमारे पास ऐसा हिस्सा है जो इस तरह दिखता है: '0000000000'||'1234'

फिर, उस पूरे चीज़ को substr फ़ंक्शन में पास करें। According to the documentation है, तो यहां substr समारोह काम करता है:

substr (एक्स, वाई, जेड) समारोह इनपुट स्ट्रिंग एक्स की सबस्ट्रिंग कि वाई वें चरित्र के साथ शुरू होता है और जो जेड वर्ण लंबा है देता है। ... यदि वाई नकारात्मक है तो सबस्ट्रिंग का पहला अक्षर बाईं ओर दाईं ओर से गिनती करके पाया जाता है।

तो यदि आप चाहते हैं कि स्ट्रिंग 10 अक्षरों तक लंबी हो, तो वाई-पैरामीटर के रूप में पास -10 (दाईं ओर से गिनती शुरू करने के लिए, 10 वर्ण वापस) और जेड पैरामीटर के रूप में 10 पास करें (कुल 10 अक्षर लेने के लिए) ।

+0

कोई विवरण नहीं है और इसी तरह का उत्तर स्वीकार किया गया है :( –

+0

आप मालिक हैं – Claudio

11

select substr('0000000000'||'1234', length('0000000000'||'1234')-9, 10) काम करता है; आपके उत्पाद संख्या के साथ '1234' विकल्प, किसी भी लंबाई < = 10।

+0

सुरुचिपूर्ण नहीं, लेकिन कार्यात्मक (+1)। धन्यवाद। – Christian

0

@ 9 000 से अपने प्रश्न के सीधा जवाब के अतिरिक्त, कुछ विचार दें कि श्रेणी, समूह और उत्पाद संख्या वास्तव में पाठ के रूप में संग्रहीत नहीं की जानी चाहिए।

+0

उन्हें पाठ बनाम संख्या के रूप में क्यों रखा जाना चाहिए? (विशेष रूप से उत्पाद संख्या, क्योंकि मुझे अगले उत्पाद संख्या के लिए अपना अधिकतम मूल्य + 1 प्राप्त करने की आवश्यकता है)। – Martijn

+1

पाठ प्रमुख शून्यों को संरक्षित करता है। "000123" स्टोर करने के लिए आपकी आवश्यकता होने पर "000123" को संग्रहीत करने के लिए कुछ कहा जाना चाहिए। –

+0

जो मुद्दा नहीं है। मुझे अगले मूल्य प्राप्त करने की ज़रूरत है; जिसका अर्थ यह है कि इसे संख्या के रूप में उपलब्ध कराया जा रहा है, और इसे शून्य-प्रीफिक्स्ड स्ट्रिंग में परिवर्तित करना है। यह कैसे संग्रहीत किया जाता है पूरी तरह से एक अलग मुद्दा है। – Martijn

4

मैं जानता हूँ कि यह एक पुराने सवाल है, लेकिन निम्न सरल है: अगर आप को समाप्त करने के चयन किए जाने वाले

-- zero-pad to 4 digits: 
select substr('0000'||3,-4); 

substr लंबाई की आवश्यकता नहीं है।

संबंधित मुद्दे

 संबंधित मुद्दे