使用STR_TO_DATE的时区表订购负值

时间:2019-12-02 10:39:01

标签: mysql timezone timezone-offset

我在mysql中有一个时区表,其中包含三个varchars列:php时区代码,每个时区的GMT偏移量数据和如下显示名称:

Africa/Abidjan, 0:00, (GMT) Monrovia, Reykjavik
Africa/Addis_Ababa, +3:00, (GMT+3:00) Nairobi
Africa/Algiers, +1:00, (GMT+1:00) West Central Africa

我正在尝试使用ORDER BY STR_TO_DATE(`data_gmt`, '%l:%i')来排序该表,但是我遇到了负偏移量的问题。

当选择偏移量字符串的日期值时,mysql向我显示负值和0:00值的空值。

data_gmt, STR_TO_DATE(`data_gmt`, '%l:%i')
---------------
0:00   NULL
+3:00  03:00:00
+1:00  01:00:00
+2:00  02:00:00
-10:00 NULL
-9:00  NULL

是否可以从负时间偏移-> 0->正时间偏移中排序此时区表?

1 个答案:

答案 0 :(得分:0)

您可以使用SUBSTRING_INDEX提取:左侧的小时部分,然后将CAST提取为带符号整数进行排序:

SELECT *
FROM data
ORDER BY CAST(SUBSTRING_INDEX(data_gmt, ':', 1) AS SIGNED)

Demo on dbfiddle