পোস্টগ্রিএসকিউএলে বামে জিরোগুলি প্যাডিং


103

আমি পোস্টগ্রেএসকিউএল-তে তুলনামূলকভাবে নতুন এবং আমি জানি যে এসকিউএল সার্ভারে বামে শূন্যের সাথে একটি সংখ্যা কীভাবে প্যাড করতে হয় তবে আমি পোস্টগ্রিসএসকিউএলে এটি বের করার জন্য লড়াই করছি।

আমার একটি সংখ্যার কলাম রয়েছে যেখানে সর্বাধিক সংখ্যার সংখ্যা 3 এবং নূন্যতম 1 হবে: এটি যদি একটি অঙ্ক হয় তবে এর বামে দুটি শূন্য রয়েছে এবং এটির 2 সংখ্যা থাকলে এটির 1, যেমন 001, 058, 123।

এসকিউএল সার্ভারে আমি নিম্নলিখিতগুলি ব্যবহার করতে পারি:

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

পোস্টগ্র্রেএসকিউএলে এটি বিদ্যমান নেই। কোন সাহায্য প্রশংসা করা হবে।


2
গুগল ব্যবহার করা ঠিক এই পৃষ্ঠাটি কীভাবে খুঁজে পেয়েছি। এটি আমার এক নম্বর গুগলের ফলাফল ছিল।
জেসন


এসকিউএল সার্ভারের কথা বলতে গেলে তাদের 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
@ ইভানক্রোল এটি সঠিক উত্তর- আপনি কী সম্পর্কে কথা বলছেন?
ইয়ারিন

@ ইয়্যারিন এই উত্তরটি হ'ল ফর্ম্যাট স্ট্রিং সহ মানযুক্ত একটি ফাংশন কল পদ্ধতি। আরপিএড / এলপ্যাড ব্যবহার করে আপনি স্ট্রিংয়ে রূপান্তর করছেন এবং তারপরে স্ট্রিং প্রক্রিয়াজাত করছেন। To_char ব্যবহার করে, আপনি কেবল স্ট্রিংফাইয়ের জন্য একটি পৃথক পদ্ধতি নির্দিষ্ট করছেন।
ইভান ক্যারল

3
@ ইভানক্রোল তারা উভয়ই দরকারী - এটির সাহায্যে স্ট্রিং দৈর্ঘ্যের জন্য একটি সংখ্যা নির্দিষ্ট করতে দেয় - অন্যটির জন্য 'এফএম' জেনে রাখা প্রয়োজন পূরণের মোডের জন্য এবং আপনাকে একটি ফর্ম্যাট চিত্র নির্দিষ্ট করতে দেয়
ব্রায়ান বার্নস

সতর্কতা: ক্লাসিকের বিপরীতে printf, এই হাড়-মাথাযুক্ত ফাংশনগুলি মানানসই না হলে আপনার স্ট্রিংটি নিঃশব্দে আকারে কাটবে। সুতরাং আপনার case when length(foo) ...আশেপাশের প্রয়োজন হতে পারে ।
স্যাম ওয়াটকিন্স

62

to_char()সংখ্যাগুলি বিন্যাস করতে এখানে ফাংশন রয়েছে:

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

fmউপসর্গ ( "ভরাট মোড") ফলে varchar প্রধান স্পেস এড়াতে। কেবল 000আপনার সংখ্যার সংখ্যাটি নির্ধারণ করে।

পিএসকিএল (9.3.5)
সহায়তার জন্য "সহায়তা" টাইপ করুন।

postgres => নমুনা_সংখ্যার সাথে (এনআর) হিসাবে (
পোস্টগ্রিস (> মান (1), (11), (100)
পোস্টগ্রিস (>)
postgres-> to_char নির্বাচন করুন (এনআর, 'fm000')
postgres-> নমুনা_ সংখ্যা থেকে;
 to_char
---------
 ২001
 ২011
 100
(3 সারি)

postgres =>

বিন্যাস ছবি উপর আরো বিস্তারিত জানার জন্য, দয়া করে ম্যানুয়াল দেখুন:
http://www.postgresql.org/docs/current/static/functions-formatting.html


2
সংখ্যাটি যদি দীর্ঘ হয় তবে to_charএটিকে ### তে রূপান্তর করে। ওও
স্যাম ওয়াটকিন্স

আমি যদি আগ্রহী যে সমস্যার কোনও সমাধান আছে যেখানে # যদি # টু_চরে নির্দিষ্ট করা থেকে বেশি হয় তবে এটি ### তে রূপান্তরিত হয়। শূন্যের সুনির্দিষ্ট # নূন্যতম কোনও উপায় আছে কি তারপরেও এর থেকে আরও বড় সংখ্যা বৃদ্ধি পাবে? উদাহরণস্বরূপ, যদি আপনি এলপ্যাডের জন্য 3 নির্দিষ্ট করে থাকেন তবে নম্বরগুলি 001 010 100 .. 1001
মাইক হেননেসি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.