我对postgresql有两个问题。 第一个是我必须以特定格式转换日期,如:2016年11月4日星期五
SELECT to_char(tstamp, 'Day DD month YYYY') FROM ...
结果是:https://i.stack.imgur.com/RjNnm.png
首先看tstamp表消失了,字符串中有更多空格:
friday....04.November..2016
*十六进制编码
第二个是我必须用语言格式转换它,例如意大利语:“Venerdì04Novembre 2016”。
感谢您的帮助
答案 0 :(得分:4)
关于第一个问题:额外的空格是因为month
和Day
模式是:
空白填充到9个字符
https://www.postgresql.org/docs/9.6/static/functions-formatting.html
所以,如果你想删除这个空格,你可以尝试这样的事情:
select trim(to_char(localtimestamp(0), 'Day'))||to_char(localtimestamp(0), ' DD ')||trim(to_char(localtimestamp(0), 'month'))||to_char(localtimestamp(0), ' YYYY')
-
关于意大利语,可能还有其他方法,但这也应该有效。你可以硬编码意大利语的月份和日期名称,并使用case
表达式“翻译”它们,如下所示:
select
case
when trim(to_char(tstamp, 'Day')) = 'Monday' then 'Monday_in_italian'
when trim(to_char(tstamp, 'Day')) = 'Tuesday' then 'Tuesday_in_italian'
when trim(to_char(tstamp, 'Day')) = 'Wednesday' then 'Wednesday_in_italian'
-- another days here
end||
to_char(tstamp, ' DD ')||
case
when trim(to_char(tstamp, 'month')) = 'january' then 'January_in_italian'
when trim(to_char(tstamp, 'month')) = 'february' then 'February_in_italian'
-- another months here
end||
to_char(tstamp, ' YYYY')
as tstamp
from your_table
请注意,如果您希望随时正常工作,则应将所有7天和所有12个月的名称放在案例表达式中。
甚至更好,在case
语句中,您可以使用D
模式确定日期和MM
模式。如果你想看到可用的模式列表,你可以点击链接,我已在上面发布。
答案 1 :(得分:1)
奥托的答案一切都很好,但编码过多。如果您的操作系统不支持意大利语本地化(locale -a
),请使用它。但如果确实如此,您可以像这样格式化您的时间:
t=# set lc_time to 'it_IT.utf8';
SET
Time: 0.295 ms
t=# select to_char(now(), 'TMDay, DD TMMonth YYYY');
to_char
-------------------------
Giovedì, 11 Maggio 2017
(1 row)
Time: 3.705 ms
格式化anf TM
前缀说明can be found in docs