postgreSQLの左側にゼロを埋め込む


103

私はPostgreSQLに比較的慣れていないため、SQL Serverで左側に数値をゼロで埋める方法を知っていますが、PostgreSQLでこれを理解するのに苦労しています。

最大桁数が3で最小値が1の数値列があります。1桁の場合は左側に2つのゼロがあり、2桁の場合は1です(例:001、058、123)。

SQL Serverでは、以下を使用できます。

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

これはPostgreSQLには存在しません。任意の助けいただければ幸いです。


2
グーグルを使うことはまさに私がこのページを見つけた方法です。それは私のナンバーワンのグーグルの結果でした。
Jason


SQL Serverといえば、それらにはformat()を使用できる機能がありますformat(Column1,'000') as Column2
Manngo 2018年

回答:


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これが正しい答えです-あなたは何について話しているのですか?
Yarin 2017

@Yarin この回答は、フォーマット文字列を使用した標準化された1つの関数呼び出しメソッドです。RPAD / LPADを使用して、文字列に変換してから文字列を処理します。to_charを使用すると、文字列化の別の方法を指定するだけです。
エヴァンキャロル

3
@EvanCarrollどちらも便利です-これは文字列の長さの数値を指定できます-もう1つは 'fm'が塗りつぶしモードを表し、フォーマット画像を指定できるようにする必要があります
Brian Burns

警告:従来のとは異なりprintf、これらの骨付きの関数は、文字列が収まらない場合、文字列をサイレントでサイズまで切断します。だからあなたはcase when length(foo) ...それの周りが必要かもしれません。
Sam Watkins、

62

to_char()関数は、形式番号にあります:

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

fm接頭辞(「塗りつぶしモード」)は、結果としてvarchar型で先頭のスペースを回避することができます。000単にあなたが持っているしたい桁数を定義します。

psql(9.3.5)
ヘルプを表示するには、「help」と入力してください。

postgres => sample_numbers(nr)with(
postgres(>値(1)、(11)、(100)
postgres(>)
postgres-> select to_char(nr、 'fm000')
postgres-> from sample_numbers;
 to_char
---------
 001
 011
 100
(3列)

postgres =>

フォーマット画像の詳細については、マニュアルを参照してください:http :
//www.postgresql.org/docs/current/static/functions-formatting.html


2
数値が長すぎる場合は、to_char### に変換します。Oo
Sam Watkins、

#がto_Charで指定されているよりも長い場合、###に変換されるという問題の解決策があるかどうか私は興味があります。とにかくゼロの具体的な最小数にして、それからより大きな数が増えるのですか?たとえば、lpadに3を指定すると、数値は001 010 100 .. 1001
mike hennessy

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.