FROM_UNIXTIME() zwraca wartość znacznika czasu. Z podręcznika: .
To, co może być teraz mylące, to fakt, że strefy czasowe są brane pod uwagę ze znacznikiem czasu.
Jeśli jesteś w strefie czasowej GMT+1h, to
select unix_timestamp('1970-01-01 00:00:00');
powraca
+---------------------------------------+
| unix_timestamp('1970-01-01 00:00:00') |
+---------------------------------------+
| 0 |
+---------------------------------------+
Ponieważ brana jest pod uwagę strefa czasowa, to
select unix_timestamp('1970-01-01 01:00:00');
wciąż powraca
+---------------------------------------+
| unix_timestamp('1970-01-01 01:00:00') |
+---------------------------------------+
| 0 |
+---------------------------------------+
Ale to...
select unix_timestamp('1970-01-01 01:00:01');
+---------------------------------------+
| unix_timestamp('1970-01-01 01:00:01') |
+---------------------------------------+
| 1 |
+---------------------------------------+
i to
select unix_timestamp('1970-01-01 02:00:00');
+---------------------------------------+
| unix_timestamp('1970-01-01 02:00:00') |
+---------------------------------------+
| 3600 |
+---------------------------------------+
teraz zwracają „poprawne” wartości.
AKTUALIZACJA:
Proste i szybkie rozwiązanie:
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