2012-02-01 41 views
15

Tôi có một bảng có một cột month (integer). Trong cột này, tôi lưu trữ các giá trị như 1, 2, .. 12.
Nhưng tôi phải hiển thị tháng tên.Lấy tên tháng từ số trong PostgreSQL

Ví dụ: Nếu giá trị là 1 Tôi cần hiển thị jan.

Trả lời

25

Về cơ bản những gì @small_duck đã đăng, nhưng một vài cải tiến:

SELECT to_char(to_timestamp (4::text, 'MM'), 'TMmon') 
  • Một dàn diễn viên đồng bằng văn bản 4::text là đủ, không cần to_char(..).

  • Câu hỏi yêu cầu chữ thường "jan", có template pattern cho điều đó: mon.

  • Nếu bạn muốn bản địa hóa đầu ra, hãy đặt tiền tố mẫu với modifierTM.

6

Có thể có một câu trả lời nhanh hơn, nhưng nó có vẻ là có thể bằng cách:

  • Quay int của bạn thành một chuỗi
  • Đọc chuỗi đó như là một dấu thời gian
  • Hiển thị tháng dấu thời gian.

Ví dụ:

select to_char(to_timestamp(to_char(4, '999'), 'MM'), 'Mon') 

lợi nhuận 'Tháng Tư'.

Bạn có thể biến nó thành một chức năng:

create function to_month(integer) returns varchar as 
$$ 
    select to_char(to_timestamp(to_char($1, '999'), 'MM'), 'Mon'); 
$$ language sql 

và sử dụng nó trong suốt mã của bạn.

select to_month(month_column) from mytable 
+0

Cảm ơn ngài .. Nó hoạt động tốt. – user007

+0

Hey - bất kỳ ý tưởng nào tại sao việc triển khai rất giống nhau sẽ gặp khó khăn khi diễn giải toàn bộ tên tháng một cách chính xác? NĂM (DM.DATE) || TO_CHAR (TO_TIMESTAMP (to_char ( \t \t trường hợp \t \t \t khi \t \t \t \t tháng (DM.DATE) +1> 12 sau đó 1 \t \t \t \t tháng khác (DM.TM_DIM_KY_DTE) +1 cuối \t \t \t, '99 '),' MM '),' Mon ') Mục tiêu là có năm hiện tại cộng với một tháng sau tháng hiện tại, vì vậy tháng 11 năm 2012 sẽ là tháng 12 năm 2012 như' 2012Dec '. Vì một số lý do, một số chữ cái được trả lại dưới dạng số như Dec = 4ec hoặc Jan = 1721395an – Phill

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