1

我有以下查询:

SELECT usersid as user,
(age(creationtime)) as account_days
FROM users

它输出用户(一个整数)和 account_days,它使用时间戳来输出年龄(即 58 天,2:31:31.387746)。

我希望输出只是说 58,而不是 58 天,2:31:31.387746。我该怎么办?我尝试过

SELECT usersid as user,
EXTRACT(day FROM(age(creationtime))) as account_days
FROM users

但它将输出更改为不匹配的数字。

我在 x86_64-unknown-linux-gnu 上使用 PostgreSQL 9.2.4 版本,由 gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 编译,64 位

4

3 回答 3

2

听起来你想研究justify_interval()date_trunc()

denis=# select justify_interval(date_trunc('day', '58 days, 2:31:31.387746'::interval));
 justify_interval 
------------------
 1 mon 28 days
(1 row)

http://www.postgresql.org/docs/current/static/functions-datetime.html

于 2013-06-07T18:23:11.030 回答
2

日期减法

date您可以通过将两个操作数转换为然后相减来获得天数,而不是使用age返回合理间隔的函数:

SELECT current_date - creationtime::date
FROM ...
WHERE ...

部分天数将向下舍入并返回整数天数。

例如:

select current_date - (current_timestamp - INTERVAL '1 month 28 days, 2:31:31.387746')::date;

to_charDDD格式说明符

或者,您可以使用格式说明符DDDfor to_char,并使用FM格式修饰符删除前导零:

 select to_char(age( current_timestamp - INTERVAL '1 month 28 days, 2:31:31.387746'), 'FMDDD');

这仍然有效> 1年:

regress=> select to_char(age( current_timestamp - INTERVAL '8 year 1 month 28 days, 2:31:31.387746'), 'FMDDD');
 to_char 
---------
 2936
(1 row)
于 2013-06-08T03:18:13.433 回答
0

只需要类似的东西,解决方案应该是:

SELECT (NOW()::date - creationtime::date) AS account_days FROM users

输出是一个整数

于 2015-04-10T08:22:33.677 回答