2014-10-15 14 views
41

Tôi tương đối mới đối với PostgreSQL và tôi biết cách tạo một số với số không ở bên trái trong SQL Server nhưng tôi đang cố gắng tìm ra điều này trong PostgreSQL.Chấm các số 0 vào bên trái trong postgreSQL

Tôi có một cột số có số chữ số tối đa là 3 và số phút là 1: nếu đó là một chữ số, nó có hai số 0 ở bên trái và nếu có 2 chữ số thì có 1 chữ số, 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] 

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

+0

Pro tip: nếu bạn đặt tiêu đề câu hỏi chính xác của bạn "số không Padding sang trái trong PostgreSQL" http: // google.com bạn sẽ thấy hàng tấn kết quả có liên quan. – zerkms

+1

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

+0

Có thể trùng lặp của hàm [tới \ _char (số) trong postgres] (https://stackoverflow.com/questions/14155656/to-charnumber-function-in-postgres) –

Trả lời

77

Bạn có thể sử dụng các chức năng rpadlpad để pad số ở bên phải hoặc bên trái, tương ứng. Lưu ý rằng điều này không làm việc trực tiếp trên con số, do đó bạn sẽ phải sử dụng ::char hoặc ::text để quă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 
+1

Đây là một câu trả lời khủng khiếp so với câu trả lời dưới đây bởi @a_horse_with_no_name https://stackoverflow.com/a/26379893/124486 –

+1

@EvanCarroll đây là câu trả lời đúng - bạn đang nói về cái gì? – Yarin

+0

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

28

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

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

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

 
psql (9.3.5) 
Type "help" for help. 

postgres=> with sample_numbers (nr) as (
postgres(>  values (1),(11),(100) 
postgres(>) 
postgres-> select to_char(nr, 'fm000') 
postgres-> from sample_numbers; 
to_char 
--------- 
001 
011 
100 
(3 rows) 

postgres=>

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

Các vấn đề liên quan