使用postgresql格式化时间戳和数字的两个问题
Two questions for formatting timestamp and number using postgresql
我正在 select 日期列,格式为 "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;
但这也不起作用。我似乎无法弄清楚格式化它的正确方法。请注意,我只想要毫秒的第一位数字。
//////////////第二题
我也在尝试 select 数字数据,这样就不会有任何尾随零。
例如,如果我在 table 中有值,例如 1、2.00、3.34、4.50。
我希望能够 select 这些值为 1、2、3.34、4.5。
我试过使用::float,但偶尔会出现奇怪的输出。四舍五入的功能我也试过了,但是不知道我需要多少个小数点,如何正确使用呢?
感谢您的帮助!
只需添加没有时区的::时间戳
select mycolumn::timestamp without time zone from mytable;
SELECT to_char(current_timestamp, 'YYYY-MM-DD HH:MI:SS:MS');
打印
2016-02-05 03:21:18:346
看来 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(::text, '.') = 0 then ::text
else rtrim(::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)
另请参阅:
我正在 select 日期列,格式为 "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;
但这也不起作用。我似乎无法弄清楚格式化它的正确方法。请注意,我只想要毫秒的第一位数字。
//////////////第二题
我也在尝试 select 数字数据,这样就不会有任何尾随零。
例如,如果我在 table 中有值,例如 1、2.00、3.34、4.50。
我希望能够 select 这些值为 1、2、3.34、4.5。
我试过使用::float,但偶尔会出现奇怪的输出。四舍五入的功能我也试过了,但是不知道我需要多少个小数点,如何正确使用呢?
感谢您的帮助!
只需添加没有时区的::时间戳
select mycolumn::timestamp without time zone from mytable;
SELECT to_char(current_timestamp, 'YYYY-MM-DD HH:MI:SS:MS');
打印
2016-02-05 03:21:18:346
看来 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(::text, '.') = 0 then ::text
else rtrim(::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)
另请参阅: