Em 9 de março de 2014 13:19, Fabrízio de Royes Mello <
[email protected]> escreveu:

> On 09-03-2014 13:17, Fabrízio de Royes Mello wrote:
>
>> On 09-03-2014 12:23, Bruno Silva wrote:
>>
>>> 2014-03-08 23:11 GMT-03:00 Fabrízio de Royes Mello
>>> <[email protected]>:
>>>
>>>> On 08-03-2014 22:33, Edson F. Lidorio wrote:
>>>>
>>>>>
>>>>> Pessoal,
>>>>> Estou precisando de uma ajuda no sql abaixo:
>>>>> Quero pegar somente a parte inteira da subtração de duas data.
>>>>>
>>>>> select dt_abertura,dt_fim,(dt_fim - dt_abertura)no_dias from osservhe;
>>>>>
>>>>>    dt_abertura |         dt_fim                        | no_dias
>>>>> -------------+-------------------------+------------------------
>>>>>    2012-11-18  | 2012-11-18 23:09:09     | 23:09:09
>>>>>    2012-07-23  | 2012-09-18 22:21:10     | 57 days 22:21:10
>>>>>    2012-09-10  | 2012-09-18 22:43:56     | 8 days 22:43:56
>>>>>    2012-09-03  | 2012-09-18 23:44:33     | 15 days 23:44:33
>>>>>    2012-08-05  | 2012-09-21 23:39:09     | 47 days 23:39:09
>>>>>    2012-08-15  | 2012-09-21 23:46:41     | 37 days 23:46:41
>>>>>    2012-08-12  | 2012-09-21 23:49:15     | 40 days 23:49:15
>>>>>    2012-08-06  | 2012-09-22 00:01:15     | 47 days 00:01:15
>>>>>    2012-08-05  | 2012-09-22 00:10:55     | 48 days 00:10:55
>>>>>    2012-07-23  | 2012-09-22 00:16:55     | 61 days 00:16:55
>>>>>    2012-10-26  | 2012-10-26 22:26:29     | 22:26:29
>>>>>    2012-09-10  | 2012-09-18 22:30:58     | 8 days 22:30:58
>>>>>    2012-07-22  | 2012-09-18 22:11:40     | 58 days 22:11:40
>>>>>
>>>>>
>>>> O resultado da sua subtração é um tipo 'interval' pois tem um timestamp
>>>> envolvido.
>>>>
>>>> Faça o seguinte:
>>>>
>>>> select dt_abertura, dt_fim, (dt_fim::date - dt_abertura) from osservhe;
>>>>
>>>> O resultado da subtração de 2 tipos 'date' é um 'integer';
>>>>
>>>
>>>
>>> Use a função extract com epoch.
>>> extract( 'epoch' from (dt_fim::date - dt_abertura))
>>>
>>
>> Bruno,
>>
>> Não vai funcionar essa sua chamada. Veja as assinaturas possíveis para
>> "date_part":
>>
>> fabrizio=# \df date_part
>>                                     List of functions
>>     Schema   |   Name    | Result data type |        Argument data types
>>         |  Type
>> ------------+-----------+------------------+----------------
>> -------------------+--------
>>
>>   pg_catalog | date_part | double precision | text, abstime         |
>> normal
>>   pg_catalog | date_part | double precision | text, date         | normal
>>   pg_catalog | date_part | double precision | text, interval         |
>> normal
>>   pg_catalog | date_part | double precision | text, reltime         |
>> normal
>>   pg_catalog | date_part | double precision | text, timestamp without
>> time zone | normal
>>   pg_catalog | date_part | double precision | text, timestamp with time
>> zone    | normal
>>   pg_catalog | date_part | double precision | text, time without time
>> zone      | normal
>>   pg_catalog | date_part | double precision | text, time with time zone
>>          | normal
>> (8 rows)
>>
>> O resultado daquela subtração será um 'integer', logo não existe uma
>> 'date_part' que tenha o segundo argumento deste tipo.
>>
>>
> Já estava esquecendo, mesmo que a chamada estivesse correta creio que o
> resultado não seria o desejado, pois o retorno do 'epoch' é o nro de
> segundos [1], e o retorno desejado é o nro de dias.
>

Edson,

Não seria assim:

postgres=# select extract(day FROM Cast('2012-09-18 22:21:10' as timestamp)
- Cast('2012-07-23' as timestamp));

 date_part

-----------

        57

(1 row)


postgres=# select extract(day FROM Cast('2012-11-18 23:09:09' as timestamp)
- Cast('2012-11-18' as timestamp));

 date_part

-----------

         0

(1 row)


Exemplo2: Tempo em horas usando extract/epoch/age:

postgres=# select extract('epoch' from age('2012-11-18
23:09:09','2012-11-18' ))* interval '1 sec' as tempo_horas;

 tempo_horas

-------------

 23:09:09

(1 row)


postgres=# select extract('epoch' from age('2012-09-18
22:21:10','2012-07-23' ))* interval '1 sec' as tempo_horas;

 tempo_horas

-------------

 1366:21:10

(1 row)
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a