PostgreSQL:日期格式和本地语言输出

6

我有两个postgresql的问题。 第一个问题是我需要将日期转换为特定格式,例如:friday 04 november 2016

SELECT to_char(tstamp, 'Day DD month YYYY') FROM ...

以下是结果:https://istack.dev59.com/RjNnm.webp

乍一看,tstamp表消失了,字符串中有更多的空格:

friday....04.November..2016

*十六进制编码

第二个问题是我需要将其转换为另一种语言格式,例如意大利语:"Venerdì 04 Novembre 2016"。

谢谢您的帮助。

2个回答

5
关于第一个问题:额外的空格是因为月份日期格式如下:

用空格填充至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个月份的名称。
或者更好的方法是,在情况语句中,您可以使用“D”模式确定日期和“MM”模式确定月份。如果您想查看可用的模式列表,请跟随我上面发布的链接。

好的,谢谢,但我不需要localtimestamp,因为tstamp是一个包含时间戳的表的名称:http://imgur.com/a/PnvYY。这就是原始查询SELECT tstamp from table,而选择trim(to_char(tstamp,'Day'))无效:http://imgur.com/a/eS48T。 - Alessandro95
tstamp是列的名称,我已经尝试了您的代码,这是结果:http://imgur.com/a/8M2nj - Alessandro95
这是你想要的吗?(图像结果) - Oto Shavadze
从您的表中选择修剪(to_char(tstamp,'Day'))|| to_char(tstamp,'DD')||修剪(to_char(tstamp,'month'))|| to_char(tstamp,'YYYY')作为时间戳。 - Oto Shavadze
是的,有一种方法,稍等片刻。 - Oto Shavadze
显示剩余7条评论

5

Oto的回答很好,但过于冗长。如果你的操作系统不支持意大利本地化(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

格式化和TM前缀解释的说明可以在文档中找到


1
有没有一种方法可以在SELECT中使用它,而不是在psql中使用? - João Ciocca
当然。上面的SQL不是特定于PSQL的。 - Vao Tsun
太棒了!TMMonthTMDay的日期格式确实返回了修剪过的完整月份/日期名称。非常感谢 @VaoTsun! - Camille

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接