Chèn các số không sang bên trái trong postgreSQL


103

Tôi tương đối mới với PostgreSQL và tôi biết cách chèn một số bằng các số không vào bên trái trong SQL Server nhưng tôi đang đấu tranh để tìm ra điều này trong PostgreSQL.

Tôi có một cột số trong đó số chữ số tối đa là 3 và số tối thiểu là 1: nếu là một chữ số, nó có hai chữ số không ở bên trái và nếu nó là 2 chữ số thì nó có 1, ví dụ: 001, 058, 123.

Trong SQL Server, tôi có thể sử dụng như sau:

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

Điều này không tồn tại trong PostgreSQL. Bất kỳ trợ giúp sẽ được đánh giá cao.


2
Sử dụng google chính xác là cách tôi tìm thấy trang này. Đó là kết quả google số một của tôi.
Jason

Có thể có bản sao của hàm to_char (số) trong postgres
Evan Carroll.

Nói về SQL Server, chúng có format()chức năng cho phép bạn sử dụng format(Column1,'000') as Column2.
Manngo

Câu trả lời:


179

Bạn có thể sử dụng các hàm rpadlpadđể đệm số sang phải hoặc sang trái tương ứng. Lưu ý rằng điều này không hoạt động trực tiếp trên các số, vì vậy bạn sẽ phải sử dụng ::charhoặc ::texttruyền chúng:

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 đây là câu trả lời phù hợp- bạn đang nói gì vậy?
Yarin

@Yarin câu trả lời này là phương thức gọi một hàm được chuẩn hóa với các chuỗi định dạng. Sử dụng RPAD / LPAD, bạn đang chuyển đổi thành chuỗi và sau đó xử lý chuỗi. Sử dụng to_char, bạn chỉ cần chỉ định một phương thức khác để lập chuỗi.
Evan Carroll

3
Họ @EvanCarroll Cả hai đều hữu ích - một điều này cho phép bạn chỉ định một số cho độ dài chuỗi - khác đòi hỏi phải biết 'fm' là viết tắt của chế độ điền và cho phép bạn chỉ định một hình ảnh định dạng
Brian Burns

CẢNH BÁO: Không giống như kiểu cổ điển printf, những chức năng có đầu bằng xương này sẽ âm thầm cắt nhỏ chuỗi của bạn theo kích thước nếu nó không vừa. Vì vậy, bạn có thể cần một case when length(foo) ...xung quanh nó.
Sam Watkins

62

Các to_char()chức năng là có để số định dạng:

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

Các fmtiền tố ( "Chế độ điền") tránh không gian hàng đầu trong varchar kết quả. Đơn 000giản chỉ xác định số chữ số bạn muốn có.

psql (9.3.5)
Nhập "help" để được trợ giúp.

postgres => với sample_numbers (nr) là (
postgres (> giá trị (1), (11), (100)
postgres (>)
postgres-> select to_char (nr, 'fm000')
postgres-> from sample_numbers;
 to_char
---------
 001
 011
 100
(3 hàng)

postgres =>

Để biết thêm chi tiết về hình ảnh định dạng, vui lòng xem hướng dẫn:
http://www.postgresql.org/docs/current/static/functions-formatting.html


2
Nếu số quá dài, hãy to_charchuyển nó thành ###. Oo
Sam Watkins

Tôi tò mò liệu có giải pháp nào cho vấn đề trong đó nếu # nếu dài hơn được chỉ định trong thành_Char, nó sẽ chuyển đổi thành ###. Có bằng cách nào đến số số không tối thiểu cụ thể và sau đó có các số lớn hơn phát triển từ đó không? Ví dụ: nếu bạn chỉ định 3 cho lpad, các số sẽ được định dạng như 001 010 100 .. 1001
mike hennessy

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.