PostgreSQL'de sıfırları sola doldurmak


103

PostgreSQL konusunda nispeten yeniyim ve SQL Server'da bir sayıyı sola sıfırlarla nasıl yazacağımı biliyorum, ancak bunu PostgreSQL'de bulmakta zorlanıyorum.

Maksimum basamak sayısının 3 ve minimumun 1 olduğu bir sayı sütunum var: bir basamaksa solda iki sıfır, 2 basamaksa 1, ör. 001, 058, 123.

SQL Server'da aşağıdakileri kullanabilirim:

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

Bu PostgreSQL'de mevcut değil. Herhangi bir yardım memnuniyetle karşılanacaktır.


2
Google kullanmak tam olarak bu sayfayı bulduğum şey Bu benim bir numaralı google sonucumdu.
Jason


SQL Server'dan bahsetmişken, format()kullanmanıza izin verecek işleve sahipler format(Column1,'000') as Column2.
Manngo

Yanıtlar:


179

Sayıları sırasıyla sağa veya sola doldurmak için rpadve lpadişlevlerini kullanabilirsiniz . Bunun doğrudan sayılar üzerinde çalışmadığını, bu nedenle bunları kullanmanız ::charveya atmanız gerekeceğini unutmayın ::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 bu doğru cevap - neden bahsediyorsun?
Yarin

@Yarin bu yanıt , biçim dizeleri ile standartlaştırılmış bir işlev çağrısı yöntemidir. RPAD / LPAD kullanarak dizelere dönüştürüyor ve ardından dizeleri işliyorsunuz. To_char kullanarak, dizgeleştirme için farklı bir yöntem belirliyorsunuz.
Evan Carroll

3
@EvanCarroll ikisi de kullanışlıdır - bu, dizi uzunluğu için bir sayı belirlemenize izin verir - diğeri, 'fm'nin doldurma modu anlamına geldiğini bilmenizi gerektirir ve bir format resmi belirlemenizi sağlar
Brian Burns

UYARI: Klasikten farklı olarak printf, bu kemik başlı işlevler, uymuyorsa ipinizi sessizce boyutuna indirir. Yani case when length(foo) ...etrafına ihtiyacınız olabilir .
Sam Watkins

62

to_char()Fonksiyon biçimi sayılara vardır:

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

fmÖn ( "dolgu modu") elde edilen varchar gelen boşluklar önler. 000Sadece sizin istediğiniz basamak sayısını tanımlar.

psql (9.3.5)
Yardım için "yardım" yazın.

postgres => sample_numbers (nr) as (
postgres (> değerler (1), (11), (100)
postgres (>)
postgres-> to_char (nr, 'fm000') seçin
postgres-> sample_numbers dan;
 to_char
---------
 001
 011
 100
(3 sıra)

postgres =>

Biçim resmi hakkında daha fazla ayrıntı için lütfen kılavuza bakın:
http://www.postgresql.org/docs/current/static/functions-formatting.html


3
Sayı çok uzunsa, to_char### olarak dönüştürülür. Oo
Sam Watkins

1
# To_Char'da belirtilenden daha uzunsa, ### biçimine dönüştüğü soruna bir çözüm olup olmadığını merak ediyorum. Asgari sıfır sayısı için bir yol var mı ve sonra bundan daha büyük sayılar büyüyor mu? Örneğin, lpad için 3 belirtirseniz, sayılar
001010100

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.