1

次のクエリがあります。

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

users (整数) を出力し、タイムスタンプを使用して年齢を出力する account_days (つまり、58 日、2:31:31.387746) を出力します。

58 日ではなく、2:31:31.387746 のように 58 と出力されるようにします。これについてどうすればいいですか?やってみました

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

ただし、出力をタイアウトしない数値に変更します。

gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3、64 ビットでコンパイルされた、x86_64-unknown-linux-gnu でバージョン PostgreSQL 9.2.4 を使用しています。

4

3 に答える 3

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書式指定子

または、書式指定子DDDforto_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 に答える
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 に答える