组合 3 列(日期、时间、时区为 VARCHAR)并表示为 UTC
Combine 3 columns (date, time, timezone as VARCHAR) and represent as UTC
由于特定原因,我们将某些事件的日期存储为 3 个单独的列(而不是单个 DATETIME
列):
day_begin (column type: date)
hour_begin (column type: time)
timezone (column type: varchar)
以下是包含这三列数据的示例数据行:
2015-01-27
09:00:00
Europe/Rome
根据此信息,我想执行 SELECT
并仅获取开始日期在特定 UTC 时间间隔内的行(例如,仅获取从 UTC 开始到 2015 年 1 月 UTC 结束的行)。
如果时间存储在单个 DATETIME
列中,这将是一件很简单的事情,但由于我们无法更改产品来满足这一特定需求 - 我需要使用 MySQL 已经为我们提供了与 UTC 进行比较的函数。
解决方案:
SELECT CONVERT_TZ(CONCAT_WS(" ", day_begin, hour_begin), timezone, "UTC")
该函数主要连接日期和小时列,并使用 timezone
列中的值作为 CONVERT_TZ()
的第二个参数,后者处理时区转换。
由于特定原因,我们将某些事件的日期存储为 3 个单独的列(而不是单个 DATETIME
列):
day_begin (column type: date)
hour_begin (column type: time)
timezone (column type: varchar)
以下是包含这三列数据的示例数据行:
2015-01-27
09:00:00
Europe/Rome
根据此信息,我想执行 SELECT
并仅获取开始日期在特定 UTC 时间间隔内的行(例如,仅获取从 UTC 开始到 2015 年 1 月 UTC 结束的行)。
如果时间存储在单个 DATETIME
列中,这将是一件很简单的事情,但由于我们无法更改产品来满足这一特定需求 - 我需要使用 MySQL 已经为我们提供了与 UTC 进行比较的函数。
解决方案:
SELECT CONVERT_TZ(CONCAT_WS(" ", day_begin, hour_begin), timezone, "UTC")
该函数主要连接日期和小时列,并使用 timezone
列中的值作为 CONVERT_TZ()
的第二个参数,后者处理时区转换。