使用postgresql格式化时间戳和数字的两个问题

Posted

技术标签:

【中文标题】使用postgresql格式化时间戳和数字的两个问题【英文标题】:Two questions for formatting timestamp and number using postgresql 【发布时间】:2016-02-05 13:51:16 【问题描述】:

我正在选择格式为“YYYY-MM-DD”的日期列。

我想将其转换为时间戳,使其为“YYYY-MM-DD HH:MM:SS:MS”

我尝试过:

select CAST(mycolumn as timestamp) from mytable;

但这导致格式为 YYYY-MM-DD HH:MM:SS

我也试过了

select TO_TIMESTAMP(mycolumn,YYYY-MM-DD HH:MM:SS:MS) from mytable;

但这也不起作用。我似乎无法弄清楚格式化它的正确方法。请注意,我只想要毫秒的第一个数字。

/////////////第二个问题

我也在尝试选择数字数据,这样就不会有任何尾随零。

例如,如果我在表中有值,例如 1、2.00、3.34、4.50。

我希望能够将这些值选择为 1、2、3.34、4.5。

我尝试使用 ::float,但偶尔会出现奇怪的输出。我也尝试了四舍五入功能,但是不知道我需要多少小数点,我怎么能正确使用它呢?

感谢您的帮助!

【问题讨论】:

只有在每个帖子中保留一个问题时才真正有效。 如果mycolumndate 列,那么在其上使用to_timestamp() 没有意义。要格式化日期(或时间戳),您必须使用to_char()to_timestamp() 用于将字符串值convert 转换为timestamp 值,而不是反过来。 【参考方案1】:

不幸的是,to_timestamp()to_char() 函数似乎并不完美。 如果找不到更好的方法,请使用以下解决方法:

with example_data(d) as (
    values ('2016-02-02')
    )
select d, d::timestamp || '.0' tstamp
from example_data;

     d      |        tstamp         
------------+-----------------------
 2016-02-02 | 2016-02-02 00:00:00.0
(1 row)

create function my_to_char(numeric)
returns text language sql as $$
    select case 
        when strpos($1::text, '.') = 0 then $1::text
        else rtrim($1::text, '.0')
    end
$$;

with example_data(n) as (
    values (100), (2.00), (3.34), (4.50))
select n::text, my_to_char(n)
from example_data;

  n   | my_to_char 
------+------------
 100  | 100
 2.00 | 2
 3.34 | 3.34
 4.50 | 4.5
(4 rows)

另请参阅:How to remove the dot in to_char if the number is an integer

【讨论】:

rtrim(v_numeric::text, '.0') 非常危险。前任它将500 转换为'5'【参考方案2】:
SELECT to_char(current_timestamp, 'YYYY-MM-DD HH:MI:SS:MS');

打印

2016-02-05 03:21:18:346

【讨论】:

【参考方案3】:

只添加::timestamp 没有时区

select mycolumn::timestamp without time zone  from mytable;

【讨论】:

这导致了相同的 YYYY-MM-DD HH:MM:SS 格式。我需要 1 毫秒的位置。 请举个例子

以上是关于使用postgresql格式化时间戳和数字的两个问题的主要内容,如果未能解决你的问题,请参考以下文章

postgresql数据库中判断是否是数字和日期时间格式函数

Jhipster 中 PostgreSQL 的列类型

Python time和datetime时间戳和时间字符串相互转换

postgresql 将数字转换为日期和格式

将数据帧与时间戳和间隔合并

php日期转时间戳