Mysql
 sql >> Base de données >  >> RDS >> Mysql

Cas SQL lorsque FROM(UNIX_TIME)

FROM_UNIXTIME() renvoie une valeur d'horodatage. À partir du manuel : .

Ce qui peut être déroutant maintenant, c'est le fait que les fuseaux horaires sont pris en compte avec l'horodatage.

Si vous êtes dans le fuseau horaire GMT+1h, cela

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

renvoie

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

Étant donné que le fuseau horaire est pris en compte, cela

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

revient toujours

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

Mais ça...

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

et ça

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

renvoie maintenant les valeurs "correctes".

MISE À JOUR :

Solution simple et rapide :

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