Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Caso SQL quando FROM(UNIX_TIME)


FROM_UNIXTIME() retorna um valor de carimbo de data/hora. Do manual: .

O que pode ser confuso agora, é o fato de que os fusos horários são considerados com timestamp.

Se você estiver no fuso horário GMT+1h, isso
select unix_timestamp('1970-01-01 00:00:00');

retorna
+---------------------------------------+
| unix_timestamp('1970-01-01 00:00:00') |
+---------------------------------------+
|                                     0 |
+---------------------------------------+

Como o fuso horário é considerado, isso
select unix_timestamp('1970-01-01 01:00:00');

ainda retorna
+---------------------------------------+
| unix_timestamp('1970-01-01 01:00:00') |
+---------------------------------------+
|                                     0 |
+---------------------------------------+

Mas isso...
select unix_timestamp('1970-01-01 01:00:01');
+---------------------------------------+
| unix_timestamp('1970-01-01 01:00:01') |
+---------------------------------------+
|                                     1 |
+---------------------------------------+

e isto
select unix_timestamp('1970-01-01 02:00:00');
+---------------------------------------+
| unix_timestamp('1970-01-01 02:00:00') |
+---------------------------------------+
|                                  3600 |
+---------------------------------------+

agora retorne valores "corretos".

ATUALIZAR:

Solução fácil e rápida:
SELECT
      CASE
          WHEN t.escalation_time = 0 THEN 0
          WHEN FROM_UNIXTIME( t.escalation_time ) = '1970-01-01 00:00:00' THEN 0
          ELSE FROM_UNIXTIME( t.escalation_time )
      END
FROM ticket t WHERE t.id =1