MySQL:CONVERT_TZ 函数无法使用字段值作为参数

问题描述 投票:0回答:1

我正在开发一款让用户(老师)安排课程的应用程序。由于该应用程序的用户可能来自世界各地,因此用户表有一个“时区”字段,默认值为“澳大利亚/维多利亚”。课程表有一个“starttime”字段,它记录了 UTC 时间课程开始的 DATETIME。课程的创建者由“ownerId”字段标识,该字段引用用户表中的 ID。 现在,我想做的是将 UTC 开始时间转换为用户的时区,作为选择查询的一部分。

如果我运行这个:

SELECT l.starttime, u.timezone, CONVERT_TZ(l.starttime,"UTC",u.timezone) AS userstart FROM lesson l JOIN user u ON l.ownerId = u.id

我得到的结果是:

2022-09-29 09:05:00 | Australia/Victoria | NULL

但是,如果我将 CONVERT_TZ 函数调用的第三个参数更改为字符串文字,如下所示:

SELECT l.starttime, u.timezone, CONVERT_TZ(l.starttime,"UTC","Australia/Victoria") AS userstart FROM lesson l JOIN user u ON l.ownerId = u.id

我明白了:

2022-09-29 09:05:00 | Australia/Victoria | 2022-09-29 19:05:00

为什么会这样?

mysql timezone
1个回答
0
投票

问题可能是您正在输入函数

convert_tz
已弃用时区
Australia/Victoria
(已弃用时区的完整 列表),因此
convert_tz
函数返回
null
。要检查数据库中所有支持的时区,请以 root 身份运行:

SELECT * FROM mysql.time_zone_name;

如果

Australia/Victoria
不在列表中,您应该用
Australia/Melbourne
替换 db 中出现的内容,并对其他已弃用的时区执行相同操作。

当您将数据作为字符串输入函数时,您使用的是双引号而不是单引号(sql 引号)。

© www.soinside.com 2019 - 2024. All rights reserved.