sql >> Base de Datos >  >> RDS >> Mysql

Caso de SQL cuando DESDE (UNIX_TIME)

FROM_UNIXTIME() devuelve un valor de marca de tiempo. Del manual: .

Lo que puede ser confuso ahora es el hecho de que las zonas horarias se consideran con marca de tiempo.

Si estás en la zona horaria GMT+1h, esto

select unix_timestamp('1970-01-01 00:00:00');

regresa

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

Dado que se considera la zona horaria, este

select unix_timestamp('1970-01-01 01:00:00');

todavía regresa

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

Pero esto...

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

y esto

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

ahora devuelve valores "correctos".

ACTUALIZAR:

Solución fácil y 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