Re: Intervals and ISO 8601 duration

Поиск
Список
Период
Сортировка
От Tatsuo Ishii
Тема Re: Intervals and ISO 8601 duration
Дата
Msg-id 20230114.111614.1469371403528976424.t-ishii@sranhm.sra.co.jp
обсуждение исходный текст
Ответ на Re: Intervals and ISO 8601 duration  (Ken Tanzer <ken.tanzer@gmail.com>)
Ответы Re: Intervals and ISO 8601 duration  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-general
> Thanks Tom!  That helped me spell it out and understand it a little more
> clearly.  Both to understand the non-identicalness, and to see the
> specifics.  But yeah it would be nice if it was a little easier to extract!
> :)
> 
> WITH foo AS (
> WITH inters AS (
>      SELECT
>          '1 day 2 hours'::interval AS i1,
>          '26 hours'::interval AS i2
> )
> SELECT
>      *,
>     EXTRACT(YEARS FROM i1)*12 + EXTRACT(MONTHS FROM i1) AS i1_months,
>     EXTRACT(DAYS FROM i1) AS i1_days,
>     EXTRACT(HOURS FROM i1) * 60 * 60 * 1000
>         + EXTRACT(MINUTES FROM i1) * 60 * 1000
>         + EXTRACT(SECONDS FROM i1) * 1000
>         + EXTRACT(MICROSECONDS FROM i1)
>     AS i1_msec,
>     EXTRACT(YEARS FROM i2)*12 + EXTRACT(MONTHS FROM i2) AS i2_months,
>     EXTRACT(DAYS FROM i2) AS i2_days,
>     EXTRACT(HOURS FROM i2) * 60 * 60 * 1000
>         + EXTRACT(MINUTES FROM i2) * 60 * 1000
>         + EXTRACT(SECONDS FROM i2) * 1000
>         + EXTRACT(MICROSECONDS FROM i2)
>     AS i2_msec,
>     i1=i2 AS equals
> FROM inters
> )
> SELECT
>     *,
>     (i1_months=i2_months AND i1_days=i2_days AND i1_msec=i2_msec) AS
> identical,
>     i1_months * 30 * 24 * 60 * 60 * 1000
>         + i1_days * 24 * 60 * 60 * 1000
>         + i1_msec AS i1_msec_total,
>     i2_months * 30 * 24 * 60 * 60 * 1000
>         + i2_days * 24 * 60 * 60 * 1000
>         + i2_msec AS i2_msec_total
> 
> FROM foo;
> 
> -[ RECORD 1 ]-+---------------
> i1            | 1 day 02:00:00
> i2            | 26:00:00
> i1_months     | 0
> i1_days       | 1
> i1_msec       | 7200000
> i2_months     | 0
> i2_days       | 0
> i2_msec       | 93600000
> equals        | t
> identical     | f
> i1_msec_total | 93600000
> i2_msec_total | 93600000

I am not sure if I fully understand what you want to do here but I
guess you can extract "93600000" part easier using "EPOCH" of EXTRACT
function.

SELECT EXTRACT(EPOCH FROM i1) AS epoch_i1, EXTRACT(EPOCH FROM i2) AS epoch_i2
FROM ( SELECT '1 day 2 hours'::interval AS i1, '26 hours'::interval AS i2) AS s;

   epoch_i1   |   epoch_i2   
--------------+--------------
 93600.000000 | 93600.000000
(1 row)

Best reagards,
--
Tatsuo Ishii
SRA OSS LLC
English: http://www.sraoss.co.jp/index_en/
Japanese:http://www.sraoss.co.jp



В списке pgsql-general по дате отправления:

Предыдущее
От: Ken Tanzer
Дата:
Сообщение: Re: Intervals and ISO 8601 duration
Следующее
От: qihua wu
Дата:
Сообщение: synchronized standby: committed local and waiting for remote ack