Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL-Fall bei FROM(UNIX_TIME)

FROM_UNIXTIME() gibt einen Zeitstempelwert zurück. Aus dem Handbuch: .

Was jetzt verwirrend sein kann, ist die Tatsache, dass Zeitzonen mit timestamp berücksichtigt werden.

Wenn Sie sich in der Zeitzone GMT+1h befinden, ist dies

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

zurück

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

Da die Zeitzone berücksichtigt wird, ist dies

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

kehrt immer noch zurück

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

Aber das...

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

und das

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

gibt nun "korrekte" Werte zurück.

AKTUALISIEREN:

Einfache und schnelle Lösung:

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