FROM_UNIXTIME()返回时间戳记值。从manual:。
TIMESTAMP的范围为'1970-01-01 00:00:01'UTC至'2038-01-19 03:14:07'UTC。
现在可能会引起混淆的是,时区被认为是时间戳。
如果在时区GMT + 1H是,这
select unix_timestamp('1970-01-01 00:00:00');
回报
+---------------------------------------+
| unix_timestamp('1970-01-01 00:00:00') |
+---------------------------------------+
| 0 |
+---------------------------------------+
由于时区被认为是,这
select unix_timestamp('1970-01-01 01:00:00');
仍返回
+---------------------------------------+
| unix_timestamp('1970-01-01 01:00:00') |
+---------------------------------------+
| 0 |
+---------------------------------------+
但这...
select unix_timestamp('1970-01-01 01:00:01');
+---------------------------------------+
| unix_timestamp('1970-01-01 01:00:01') |
+---------------------------------------+
| 1 |
+---------------------------------------+
这
select unix_timestamp('1970-01-01 02:00:00');
+---------------------------------------+
| unix_timestamp('1970-01-01 02:00:00') |
+---------------------------------------+
| 3600 |
+---------------------------------------+
现在回到 “正确” 的价值观。
UPDATE:
简单快捷的解决方案:
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
你能添加数据和不匹配的结果的样本? –
是的,上面提到的选择的结果是值为30的一行。 –
他打算在这里放一张桌子的小堆,所以我们可以重现这个问题。 – fancyPants