Erro ao converter query de MySQL para PostgreSQL

1. Erro ao converter query de MySQL para PostgreSQL

RENATA BARRETO
renatabarreto

(usa Red Hat)

Enviado em 17/09/2015 - 09:52h

Olá,

preciso alterar uma query que originalmente foi feita em MySQL e que não está funcionando no PostgreSQL. As funções utilizadas no Mysql não são compativeis com o Postgresql, gostaria de dicas e sugestões para resolver esse problema!!

Os erros acontecem aqui:

CAST(CONCAT(TIMESTAMPDIFF(HOUR, ss.datahoralimite, ss.datahorasuspensaosla), 'h',
TIMESTAMPDIFF(MINUTE, ss.datahoralimite + INTERVAL TIMESTAMPDIFF(HOUR, ss.datahoralimite, ss.datahorasuspensaosla) HOUR ,
ss.datahorasuspensaosla), 'm') AS CHAR)

E aqui:

CAST(CONCAT(TIMESTAMPDIFF(HOUR, ss.datahoralimite, coalesce(ss.datahorafim, CURRENT_TIMESTAMP)), 'h ',
TIMESTAMPDIFF(MINUTE, ss.datahoralimite + INTERVAL TIMESTAMPDIFF(HOUR, ss.datahoralimite, coalesce(ss.datahorafim, CURRENT_TIMESTAMP)) HOUR , coalesce(ss.datahorafim, CURRENT_TIMESTAMP)), 'm') AS CHAR)

Se alguém puder me ajudar agradeço muito!


  


2. Re: Erro ao converter query de MySQL para PostgreSQL

Buckminster
Buckminster

(usa Debian)

Enviado em 17/09/2015 - 12:12h

Qual a versão do PostgreSQL?

Mas basicamente para concatenar é assim:

select 'abcde' || 'fghij';

ou

select cast('abcde' as text) || cast('fghij' as text);


3. Re: Erro ao converter query de MySQL para PostgreSQL

RENATA BARRETO
renatabarreto

(usa Red Hat)

Enviado em 17/09/2015 - 15:37h

Buckminster escreveu:

Qual a versão do PostgreSQL?

Mas basicamente para concatenar é assim:

select 'abcde' || 'fghij';

ou

select cast('abcde' as text) || cast('fghij' as text);


A versão do PostgreSQL é 9.3.
O problema é a função TIMESTAMPDIFF que não existe no PostgreSQL!
Não sei o que usar no lugar dela!






4. Re: Erro ao converter query de MySQL para PostgreSQL

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 17/09/2015 - 23:18h


Segundo: http://stackoverflow.com/questions/1964544/timestamp-difference-in-hours-for-postgresql

EXTRACT(EPOCH FROM current_timestamp-somedate)/3600


5. Re: Erro ao converter query de MySQL para PostgreSQL

Buckminster
Buckminster

(usa Debian)

Enviado em 18/09/2015 - 08:57h

Para esta query

CAST(CONCAT(TIMESTAMPDIFF(HOUR, ss.datahoralimite, ss.datahorasuspensaosla), 'h',
TIMESTAMPDIFF(MINUTE, ss.datahoralimite + INTERVAL TIMESTAMPDIFF(HOUR, ss.datahoralimite, ss.datahorasuspensaosla) HOUR ,
ss.datahorasuspensaosla), 'm') AS CHAR)

tente assim

SELECT CAST(EXTRACT(HOUR FROM TIMESTAMP 'ss.datahoralimite', 'ss.datahorasuspensaosla' as h)) || CAST(EXTRACT(MINUTE FROM TIMESTAMP 'ss.datahoralimite') + (EXTRACT(HOUR FROM TIMESTAMP 'ss.datahoralimite', 'ss.datahorasuspensaosla' || HOUR FROM TIMESTAMP 'ss.datahorasuspensaosla' as m))) ;

Não testei, além disso fiz rápido de olho aqui pois faz tempo que não trabalho com MySQL, somente com PostgreSQL.
Alguma coisa tu terá que adaptar e corrigir na sintaxe.


Veja os seguintes links:

http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT
Veja a seção 9.9.1 EXTRACT, date_part


SELECT EXTRACT(MINUTE FROM (timestamp_B - timestamp_A)) FROM TableA
http://stackoverflow.com/questions/14020919/find-difference-between-timestamps-in-seconds-in-postgre...







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts