How to store in hours:minutes:seconds where hours may be bigger than 24

Started by Celia McInnisabout 2 years ago7 messagesgeneral
Jump to latest
#1Celia McInnis
celia.mcinnis@gmail.com

Hi:

I want to store times in a database as hours:minutes:seconds where hours
can be greater than 24. How do I do this? I will want to be able to add
such times.

Thanks,
Celia McInnis

#2Ron
ronljohnsonjr@gmail.com
In reply to: Celia McInnis (#1)
Re: How to store in hours:minutes:seconds where hours may be bigger than 24

On Tue, Mar 19, 2024 at 10:05 PM Celia McInnis <celia.mcinnis@gmail.com>
wrote:

Hi:

I want to store times in a database as hours:minutes:seconds where hours
can be greater than 24. How do I do this? I will want to be able to add
such times.

Try the INTERVAL data type.

#3Steve Baldwin
steve.baldwin@gmail.com
In reply to: Celia McInnis (#1)
Re: How to store in hours:minutes:seconds where hours may be bigger than 24

Could you use an interval data type? For example:

b2bcreditonline=# create table interval_example (i interval);
CREATE TABLE
b2bcreditonline=# insert into interval_example values
('26:15:32'::interval);
INSERT 0 1
b2bcreditonline=# select * from interval_example;
i
----------
26:15:32
(1 row)

b2bcreditonline=# select i, i + interval '45 minutes' as plus from
interval_example;
i | plus
----------+----------
26:15:32 | 27:00:32
(1 row)

Steve

On Wed, Mar 20, 2024 at 1:05 PM Celia McInnis <celia.mcinnis@gmail.com>
wrote:

Show quoted text

Hi:

I want to store times in a database as hours:minutes:seconds where hours
can be greater than 24. How do I do this? I will want to be able to add
such times.

Thanks,
Celia McInnis

#4Celia McInnis
celia.mcinnis@gmail.com
In reply to: Steve Baldwin (#3)
Re: How to store in hours:minutes:seconds where hours may be bigger than 24

Thanks for the suggestion, Steve, but No - when I insert 25:17:07::interval
into my table I get 01:17:07 into the table - i.e., it replaces 25 hours by
(25 mod 24) hours or 1 hour, and this is not what I want. I really need the
number of hours rather than the number of hours mod 24. Do I have to make a
composite type to get what I want???

Thanks,
Celia McInnis

On Tue, Mar 19, 2024 at 10:44 PM Steve Baldwin <steve.baldwin@gmail.com>
wrote:

Show quoted text

Could you use an interval data type? For example:

b2bcreditonline=# create table interval_example (i interval);
CREATE TABLE
b2bcreditonline=# insert into interval_example values
('26:15:32'::interval);
INSERT 0 1
b2bcreditonline=# select * from interval_example;
i
----------
26:15:32
(1 row)

b2bcreditonline=# select i, i + interval '45 minutes' as plus from
interval_example;
i | plus
----------+----------
26:15:32 | 27:00:32
(1 row)

Steve

On Wed, Mar 20, 2024 at 1:05 PM Celia McInnis <celia.mcinnis@gmail.com>
wrote:

Hi:

I want to store times in a database as hours:minutes:seconds where hours
can be greater than 24. How do I do this? I will want to be able to add
such times.

Thanks,
Celia McInnis

#5Christophe Pettus
xof@thebuild.com
In reply to: Celia McInnis (#4)
Re: How to store in hours:minutes:seconds where hours may be bigger than 24

On Mar 19, 2024, at 19:56, Celia McInnis <celia.mcinnis@gmail.com> wrote:

Thanks for the suggestion, Steve, but No - when I insert 25:17:07::interval into my table I get 01:17:07 into the table - i.e., it replaces 25 hours by (25 mod 24) hours or 1 hour, and this is not what I want. I really need the number of hours rather than the number of hours mod 24. Do I have to make a composite type to get what I want???

I'm not seeing that result:

xof=# create table t (i interval);
CREATE TABLE
xof=# insert into t values('25:17:07'::interval);
INSERT 0 1
xof=# select * from t;
i
----------
25:17:07
(1 row)

Can you show what you are doing that gets the result you describe?

#6Tom Lane
tgl@sss.pgh.pa.us
In reply to: Celia McInnis (#4)
Re: How to store in hours:minutes:seconds where hours may be bigger than 24

Celia McInnis <celia.mcinnis@gmail.com> writes:

Thanks for the suggestion, Steve, but No - when I insert 25:17:07::interval
into my table I get 01:17:07 into the table - i.e., it replaces 25 hours by
(25 mod 24) hours or 1 hour, and this is not what I want.

There is definitely something you are not telling us, because it
works in isolation:

regression=# create table t (f1 interval);
CREATE TABLE
regression=# insert into t values ('25:17:07'::interval);
INSERT 0 1
regression=# select * from t;
f1
----------
25:17:07
(1 row)

What's the full context of your problem?

regards, tom lane

#7Celia McInnis
celia.mcinnis@gmail.com
In reply to: Christophe Pettus (#5)
Re: How to store in hours:minutes:seconds where hours may be bigger than 24

Whoops - I hadn't changed the type of the column in the table that I was
inserting into - it was of type "TIME WITHOUT TIMEZONE". Now that I have
set the column type to INTERVAL, I can insert the string '25:17:07' into
the column without even needing to do any casting.

Thank goodness and thanks!
Celia

On Tue, Mar 19, 2024 at 11:01 PM Christophe Pettus <xof@thebuild.com> wrote:

Show quoted text

On Mar 19, 2024, at 19:56, Celia McInnis <celia.mcinnis@gmail.com>

wrote:

Thanks for the suggestion, Steve, but No - when I insert

25:17:07::interval into my table I get 01:17:07 into the table - i.e., it
replaces 25 hours by (25 mod 24) hours or 1 hour, and this is not what I
want. I really need the number of hours rather than the number of hours mod
24. Do I have to make a composite type to get what I want???

I'm not seeing that result:

xof=# create table t (i interval);
CREATE TABLE
xof=# insert into t values('25:17:07'::interval);
INSERT 0 1
xof=# select * from t;
i
----------
25:17:07
(1 row)

Can you show what you are doing that gets the result you describe?