PostgreSQL में बाईं ओर पैडिंग शून्य


103

मैं PostgreSQL के लिए अपेक्षाकृत नया हूं और मुझे पता है कि SQL सर्वर में बाईं ओर शून्य के साथ एक संख्या को कैसे पैड करना है लेकिन मैं PostgreSQL में यह पता लगाने के लिए संघर्ष कर रहा हूं।

मेरे पास एक संख्या स्तंभ है जहां अंकों की अधिकतम संख्या 3 है और न्यूनतम 1 है: यदि यह एक अंक है, तो इसके बाईं ओर दो शून्य हैं, और यदि यह 2 अंक हैं तो इसमें 1 है, उदाहरण के लिए 001, 058, 123।

SQL सर्वर में मैं निम्नलिखित का उपयोग कर सकता हूं:

RIGHT('000' + cast([Column1] as varchar(3)), 3) as [Column2]

यह PostgreSQL में मौजूद नहीं है। किसी भी सहायता की सराहना की जाएगी।


2
Google का उपयोग करना बिल्कुल वैसा है जैसा मैंने इस पृष्ठ को पाया। यह मेरा नंबर-एक Google परिणाम था।
जेसन


SQL सर्वर की बात करें तो उनके पास format()फ़ंक्शन है, जो आपको उपयोग करने देगा format(Column1,'000') as Column2
मिंगजो

जवाबों:


179

आप संख्याओं rpadऔर lpadकार्यों को क्रमशः दाईं ओर या बाईं ओर पैड करने के लिए उपयोग कर सकते हैं। ध्यान दें कि यह सीधे संख्याओं पर काम नहीं करता है, इसलिए आपको इनका उपयोग करना होगा ::charया ::textउन्हें डालना होगा:

SELECT RPAD(numcol::text, 3, '0'), -- Zero-pads to the right up to the length of 3
       LPAD(numcol::text, 3, '0'), -- Zero-pads to the left up to the length of 3
FROM   my_table

2
@EvanCarroll यह सही जवाब है- आप किस बारे में बात कर रहे हैं?
यारिन

@ यारिन यह उत्तर प्रारूप स्ट्रिंग के साथ मानकीकृत एक फ़ंक्शन कॉल विधि है। RPAD / LPAD का उपयोग करके आप स्ट्रिंग्स में कनवर्ट कर रहे हैं और फिर स्ट्रिंग्स को संसाधित कर रहे हैं। Of_char का उपयोग करके, आप केवल स्ट्रिंग करने के लिए एक अलग विधि निर्दिष्ट कर रहे हैं।
इवान कैरोल

3
@EvanCarroll वे दोनों उपयोगी हैं - यह आपको स्ट्रिंग की लंबाई के लिए एक संख्या निर्दिष्ट करने देता है - दूसरे को भरने के लिए 'fm' जानने की आवश्यकता होती है और आपको एक प्रारूप चित्र निर्दिष्ट करने देता है
ब्रायन बर्न्स

चेतावनी: क्लासिक के विपरीत printf, ये हड्डी-सिर वाले कार्य चुपचाप आपके स्ट्रिंग को आकार में काट देंगे यदि यह फिट नहीं होता है। तो आपको case when length(foo) ...इसके आसपास की आवश्यकता हो सकती है।
सैम वाटकिंस

62

to_char()समारोह प्रारूप नंबरों के लिए है:

select to_char(column_1, 'fm000') as column_2
from some_table;

fmउपसर्ग ( "भरने मोड") जिसके परिणामस्वरूप varchar में अग्रणी रिक्त स्थान बचा जाता है। 000बस अंक आप करना चाहते हैं की संख्या को परिभाषित करता है।

psql (9.3.5)
मदद के लिए "मदद" टाइप करें।

postgres => sample_numbers (nr) के रूप में (
पोस्टग्रेज (> मान) (1), (11), (100)
पोस्टग्रैज (>)
postgres-> select_char (nr, 'fm000')
postgres-> sample_numbers से;
 TO_CHAR
---------
 001
 011
 100
(3 पंक्तियाँ)

postgres =>

प्रारूप चित्र पर अधिक जानकारी के लिए, कृपया मैनुअल देखें:
http://www.postgresql.org/docs/current/static/functions-formatting.html


2
यदि संख्या बहुत लंबी है, तो to_charइसे ### में कनवर्ट करता है। ऊ
सैम वॉटकिंस

मैं उत्सुक हूँ अगर वहाँ समस्या का समाधान है जहाँ अगर # अगर निर्दिष्ट to_Char से अधिक है, तो यह ### में परिवर्तित हो जाता है। क्या ज़ीरो के विशिष्ट # न्यूनतम के लिए वैसे भी है और फिर उससे बड़ी संख्याएं बढ़ी हैं? उदाहरण के लिए, यदि आप lpad के लिए 3 निर्दिष्ट करते हैं, तो संख्याएँ 001 010 100 .. 1001
माइक हाइनीनेस

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.