【问题标题】:Order timezone table with STR_TO_DATE with negative values使用负值的 STR_TO_DATE 订购时区表
【发布时间】:2020-03-26 23:06:40
【问题描述】:

我在 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 -> 正时间偏移量订购这个时区表?

【问题讨论】:

  • 在你的sql_mode中有NO_ZERO_IN_DATE?
  • @AlbertoMoro sql_mode='' 但我想这对负日期没有影响

标签: mysql timezone timezone-offset


【解决方案1】:

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

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

Demo on dbfiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-19
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多